Java 我可以从本机c++;

Java 我可以从本机c++;,java,c++,version,Java,C++,Version,我正在用原生C++/MFC编写一个复杂的安装程序。我非常希望能够检测到安装的Java版本(如果有) 这是否可能,以及如何实现?派生一个执行以下命令的进程:java-version。收集输出并对其进行分析。它看起来如下所示: java version "1.5.0_16" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b06-284) Java HotSpot(TM) Client VM (build 1.5.0_

我正在用原生C++/MFC编写一个复杂的安装程序。我非常希望能够检测到安装的Java版本(如果有)


这是否可能,以及如何实现?

派生一个执行以下命令的进程:
java-version
。收集输出并对其进行分析。它看起来如下所示:

java version "1.5.0_16"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b06-284)
Java HotSpot(TM) Client VM (build 1.5.0_16-133, mixed mode, sharing)

这是写给stderr的。您需要收集stderr输出并对其进行解析。

您可以尝试在子流程中运行
java-version
(使用管道读取该流程的输出)并解析结果(如果有);或者,您可能会弄乱Windows的注册表(感觉更复杂,但可能不那么麻烦)。

请记住,在一台机器上同时安装多个JRE是完全可能的。如果您的安装程序检测到多个JRE,它应该为用户提供一个选择,而不是假设其中一个(例如最新的一个)应该是您的应用程序将使用的JRE。

我建议使用注册表。您正在编程windows,所以请按windows方式进行编程。注册焦虑是非理性的

版本的注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\CurrentVersion
可以找到如何从注册表获取值的信息


可以找到其他与java相关的注册表项的信息。

我要补充的是,您可能需要平台上的shell的帮助,否则执行“java”将无能为力,因为您当前的目录中可能没有“java”二进制文件。在*nix上,您将执行类似于“sh-c‘java-version’”的命令,以确保您确实从路径执行java。我不确定Windows上是否有相同的功能。@肖恩·欧文:Windows通常会自动查找进程的PATH环境变量,而无需任何shell的帮助。如何收集该输出?我一直试图通过将STDOUT重定向到文本文件,然后解析文本文件来实现这一点。但是,它似乎没有使用标准输出,因为数据仍然会进入屏幕而不是文件…Doh。没有关系。不管出于什么原因,它都通过STDERR而不是STDOUT进行屏幕输出。Argh.:-)我在软件中找到并解析了版本信息\javaFoT\java java运行时环境\BuffSerjavaVoice谢谢你会从C++程序中“启动Java DLL”是可行的吗?应该可以很好地了解机器上默认的JVM是什么。浏览器版本不能是真正的系统版本…我建议您使用@emg-2 answer。