如何从CreateProcess(C ++)启动64位版本的javaw.exe

时间:2011-04-26 21:59:46

标签: 64-bit createprocess javaw syswow64

我正在用C ++编写一个启动器来在Windows上启动基于Java的GUI应用程序。我正在使用CreateProcess启动“javaw.exe”。除了始终启动32位版本的“javaw.exe”之外,一切正常。

安装java时,它会将%windir%\System32中的可执行文件“java.exe”和“javaw.exe”放在32位窗口上。在64位窗口上,它将相同的可执行文件放在%windir%\SysWow64

有三种可能性:

  1. 在32位窗口上执行的32位启动程序:%windir%\System32位于搜索路径中,找到32位javaw.exe。 GUI启动。一切正常。

  2. 在64位窗口上执行的32位启动程序:%windir%\System32位于搜索路径中。 %windir%\System32被重定向到%windir%\SysWow64(因为我的启动器在这种情况下是32位)。找到32位javaw.exe。 GUI启动。一切正常。

  3. 在64位窗口上执行的64位启动程序:%windir%\System32位于搜索路径中。没有重定向发生。它不包含可执行文件javaw.exe。发射器失灵。

  4. 如何在第三种情况下启动64位javaw.exe?

1 个答案:

答案 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密钥。