如何在 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
.
中读取注册表项
我有一个读取注册表并在 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看看能不能用?
我的建议是参考
我不熟悉您所说的 SimpleRegistryManager class,但也有可能该实现试图根据 VM 类型传递 KEY_WOW_ 标志并与您的实际情况相冲突想要它做。
对于 Windows 上的开发人员来说,这并不是一个罕见的错误。 (尤其是在 64 位 windows 上与各种 32 位和 64 位应用程序互操作时。)有些人采取懒惰的方法。当他们尝试读取注册表项时,如果 HKLM\Software\MyApp
中不存在该注册表项,则代码会退回到尝试从 HKLM\Software\Wow6432Node\MyApp
.