4

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

这是可能的,那么,如何?

4

4 回答 4

3

派生一个执行以下命令的进程: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 输出并对其进行解析。

于 2009-05-24T23:01:21.723 回答
2

我建议使用注册表。您正在对窗口进行编程,所以以 Windows 方式进行。注册焦虑是不合理的。

版本的注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\CurrentVersion

可以在此处找到如何从注册表中获取值的信息。

可以在此处找到有关其他 java 相关注册表项的信息。

于 2009-05-25T07:35:29.473 回答
1

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

于 2009-05-24T23:03:43.527 回答
1

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

于 2009-05-24T23:19:47.410 回答