如何从 CreateProcess (C++) 启动 64 位版本的 javaw.exe
我正在用 C++ 编写一个启动器,以在 Windows 上启动基于 java 的 GUI 应用程序。我正在使用 CreateProcess 启动“javaw.exe”。除了始终启动 32 位版本的“javaw.exe”之外,一切正常。
安装 java 后,它会将可执行文件“java.exe”和“javaw.exe”放在 32 位 Windows 上的 %windir%\System32
中。在 64 位 Windows 上,它将相同的可执行文件放入 %windir%\SysWow64
中。
有 3 种可能性:
在 32 位 Windows 上执行的 32 位启动器:
%windir%\System32
在搜索路径中,并找到 32 位 javaw.exe。 GUI 启动。一切正常。在 64 位 Windows 上执行的 32 位启动器:
%windir%\System32
位于搜索路径中。%windir%\System32
被重定向到%windir%\SysWow64
(因为在这种情况下我的启动器是 32 位的)。找到 32 位 javaw.exe。 GUI 启动。一切正常。在 64 位 Windows 上执行的 64 位启动器:
%windir%\System32
位于搜索路径中。不会发生重定向。它不包含可执行文件 javaw.exe。启动器失败。
在第三种情况下如何启动 64 位 javaw.exe?
I am writing a launcher in C++ to launch my java based GUI application on Windows. I am using CreateProcess
to launch "javaw.exe". Everything works except for the fact that 32-bit version of "javaw.exe" is always launched.
When java is installed, it puts the executables "java.exe" and "javaw.exe" in %windir%\System32
on 32-bit windows. On 64-bit windows, it puts the same executables in %windir%\SysWow64
.
There are 3 possibilities:
32-bit launcher executed on 32-bit windows:
%windir%\System32
is in search path, and 32-bit javaw.exe is found. The GUI launches. Everything works.32-bit launcher executed on 64-bit windows:
%windir%\System32
is in search path.%windir%\System32
is redirected to%windir%\SysWow64
(since my launcher is 32 bit in this case). 32-bit javaw.exe is found. The GUI launches. Everything works.64-bit launcher executed on 64-bit windows:
%windir%\System32
is in search path. No redirection happens. It does not contain the executable javaw.exe. The launcher fails.
How do I launch 64-bit javaw.exe in the third case?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我终于找到了一个解决方案(通过挖掘 stackoverflow 上的各种帖子)。
最新版本的 JRE 在安装时会在 System32 中放置“javaw.exe”的副本。以前版本的 64 位 JRE 可能没有(不确定)。
无论如何,注册表项
HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment
都有一个属性CurrentVersion
,它指向系统默认JRE 的项。版本号对应的子键有一个属性JavaHome
,它指向JRE安装的位置。如果未安装 JRE/JDK,则无法找到
Java Runtime Environment
键。I finally found a solution (by digging through various posts on stackoverflow).
Recent versions of JRE when installed do put a copy of "javaw.exe" in System32. The previous versions of 64 bit JRE probably didn't (not sure).
In any case, the registry key
HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment
has a propertyCurrentVersion
which points to the key for the default JRE for the system. The sub-key corresponding to the version number has a propertyJavaHome
which points to the location of JRE installation.If JRE/JDK is not installed, then the
Java Runtime Environment
key won't be found.