从c++ (windows)中找到JRE

Finding a JRE from C++ (windows)

本文关键字:JRE c++ windows      更新时间:2023-10-16

我正在为我的Java程序做一个小的启动程序,我的想法是,我可以在调用Java之前设置内存需求,相关库和类似的东西。

然而,我越来越发现似乎没有一种固定的方式从任何地方调用Java。

  1. 不再是在system32中有java.exe的情况,所以不能保证。
  2. 在大多数计算机上,在HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER下有一个注册表项,它定义了一个JRE子键,然后是一个JavaHome值。这在大多数计算机上都有效,但在我的新计算机上(新安装的java,不到两周前构建的)这些注册表不存在。在CURRENT_USER中有JRE条目,但是没有JavaHome。
  3. JAVA_HOME环境变量不总是被设置,或者设置得不正确。特别是在没有安装JDK的机器上。
  4. 我显然不能依赖Java被安装到C:/Program Files/Java。

我应该如何从c++可靠地调用java程序?或者就此而言,从任何地方?我可以让我的程序尝试所有四种可能的方法,但如果它们都是空的呢?

首先,强烈建议使用一种可用的脚本语言来查找JRE位置、设置内存需求和诸如此类的东西。由于BAT文件的语言相对较差,您可以使用VBS或JScript并使用名为cscript的实用程序运行它们。

关于JRE在哪里的事实。通常可以在注册表中找到JRE。例如,在我的机器上,我可以看到以下条目。HKEY_LOCAL_MACHINESOFTWAREJavaSoftJava Runtime Environment1.6.0_26

可能你有较新的安装…无论如何,检查Java安装条目:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall在我的情况下,我有一个条目{26A24AE4-039D-4CA4-87B4-2F83216012FF},其中键名为InstallLocation包含Java Home的路径。

下一个方法是检查Java的主环境变量。

最后一种方法是在%ProgramFiles%

中执行搜索。

在安装程序中尝试所有方法,可能找到多个JRE,也可能一个也没有。然后显示检测到的JREs,并允许选择想要使用的用户。用户也可以指向JRE,特别是当安装程序没有找到它的时候。

Eclipse使用C shim (Eclipse .exe)来生成JVM。您可以查看源代码并进行调整。