如何在 Java 程序中启用和禁用 KEY_WOW64_32KEY

How to enable and disable KEY_WOW64_32KEY in Java program

我有一个读取注册表并在 HKEY_LOCAL_MACHINE\Software\MyApp\ 中查找值的 32 位应用程序,但是当 运行 在 windows 的 64 位版本上时,该值为在 HKEY_LOCAL_MACHINE\Software\Wow6432Node\MyApp 下。 但我的应用程序仍在 HKEY_LOCAL_MACHINE\Software\MyApp\

中查找值

我正在使用 com.zerog.ia.api.pub.SimpleRegistryManager api 进行注册表操作 class 用于访问 Win32 系统注册表。

在 MSDN 的参考文献中, KEY_WOW64_32KEY 标志用于从 32 位或 64 位应用程序访问 32 位密钥。 https://msdn.microsoft.com/en-us/library/windows/desktop/aa384129(v=vs.85).aspx

使用 Java api

启用或禁用 [​​=25=] 标志的方法也是如此

我怀疑如果在 java.exe 的 32 位版本下 运行ning,您的程序将无需修改即可正常运行。你能运行 64位系统上的32位java.exe看看能不能用?

我的建议是参考 如何检测您的程序是否 运行ning 在 32 位或 64 位 VM 下。然后更改代码以在 64 位 运行ning 时引用 Wow64 注册表项路径。

我不熟悉您所说的 SimpleRegistryManager class,但也有可能该实现试图根据 VM 类型传递 KEY_WOW_ 标志并与您的实际情况相冲突想要它做。

对于 Windows 上的开发人员来说,这并不是一个罕见的错误。 (尤其是在 64 位 windows 上与各种 32 位和 64 位应用程序互操作时。)有些人采取懒惰的方法。当他们尝试读取注册表项时,如果 HKLM\Software\MyApp 中不存在该注册表项,则代码会退回到尝试从 HKLM\Software\Wow6432Node\MyApp.

中读取注册表项