我有一个32位的应用程序,它读取注册表并在hkey\ U local\ U machine\software\myapp\中查找值,但在64位版本的windows上运行时,该值位于hkey\ U local\ U machine\software\wow6432node\myapp下。但我的应用程序仍然在hkey\ U local\ U machine\software\myapp中查找值
我正在使用com.zerog.ia.api.pub.simpleregistrymanager api进行注册表操作此类用于访问win32系统注册表。
在msdn的ref中,key\u wow64\u 32key标志用于从32位或64位应用程序访问32位密钥。https://msdn.microsoft.com/en-us/library/windows/desktop/aa384129(v=vs.85).aspx
那么,有什么方法可以使用java api启用或禁用key\u wow64\u 32key标志呢
1条答案
按热度按时间kxe2p93d1#
我怀疑如果你的程序是在32位版本的java.exe下运行的,那么你的程序在没有修改的情况下也能正常工作。你能在64位系统上运行32位的java.exe,看看它是否有效吗?
我的建议是参考这个链接,了解如何检测您的程序是在32位还是64位虚拟机下运行。然后将代码更改为在64位上运行时引用wow64注册表项路径。
我不熟悉您提到的simpleregistrymanager类,但也有可能实现试图根据vm类型传递key\u wow\u标志,并且与您真正希望它做的事情相冲突。
这对于windows上的开发人员来说并不少见(尤其是在64位windows上与各种32位和64位应用程序进行交互时。)有些人会采取懒惰的方法。当他们试图读取注册表项时,如果注册表项在
HKLM\Software\MyApp
,则代码返回到尝试从HKLM\Software\Wow6432Node\MyApp
.