我正在用C ++编写一个启动器来在Windows上启动基于Java的GUI应用程序。我正在使用CreateProcess
启动“javaw.exe”。除了始终启动32位版本的“javaw.exe”之外,一切正常。
安装java时,它会将%windir%\System32
中的可执行文件“java.exe”和“javaw.exe”放在32位窗口上。在64位窗口上,它将相同的可执行文件放在%windir%\SysWow64
。
有三种可能性:
在32位窗口上执行的32位启动程序:%windir%\System32
位于搜索路径中,找到32位javaw.exe。 GUI启动。一切正常。
在64位窗口上执行的32位启动程序:%windir%\System32
位于搜索路径中。 %windir%\System32
被重定向到%windir%\SysWow64
(因为我的启动器在这种情况下是32位)。找到32位javaw.exe。 GUI启动。一切正常。
在64位窗口上执行的64位启动程序:%windir%\System32
位于搜索路径中。没有重定向发生。它不包含可执行文件javaw.exe。发射器失灵。
如何在第三种情况下启动64位javaw.exe?
答案 0 :(得分:2)
我终于找到了一个解决方案(通过挖掘stackoverflow上的各种帖子)。
安装时最新版本的JRE会在System32中放置“javaw.exe”的副本。以前版本的64位JRE可能没有(不确定)。
在任何情况下,注册表项HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment
都有一个属性CurrentVersion
,它指向系统默认JRE的键。与版本号对应的子键具有属性JavaHome
,该属性指向JRE安装的位置。
如果未安装JRE / JDK,则找不到Java Runtime Environment
密钥。