从c++ (windows)中找到JRE
Finding a JRE from C++ (windows)
我正在为我的Java程序做一个小的启动程序,我的想法是,我可以在调用Java之前设置内存需求,相关库和类似的东西。
然而,我越来越发现似乎没有一种固定的方式从任何地方调用Java。
- 不再是在system32中有java.exe的情况,所以不能保证。
- 在大多数计算机上,在HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER下有一个注册表项,它定义了一个JRE子键,然后是一个JavaHome值。这在大多数计算机上都有效,但在我的新计算机上(新安装的java,不到两周前构建的)这些注册表不存在。在CURRENT_USER中有JRE条目,但是没有JavaHome。 JAVA_HOME环境变量不总是被设置,或者设置得不正确。特别是在没有安装JDK的机器上。
- 我显然不能依赖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。您可以查看源代码并进行调整。