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

发布于 2024-11-03 15:37:23 字数 797 浏览 0 评论 0原文

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

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

有 3 种可能性:

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

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

  3. 在 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:

  1. 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.

  2. 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.

  3. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

瘫痪情歌 2024-11-10 15:37:23

我终于找到了一个解决方案(通过挖掘 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 property CurrentVersion which points to the key for the default JRE for the system. The sub-key corresponding to the version number has a property JavaHome which points to the location of JRE installation.

If JRE/JDK is not installed, then the Java Runtime Environment key won't be found.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文