读取64位机器上的注册表
我开发了一个32位应用程序(x86版本),稍后将在64位机器上部署。我已经在注册表中设置了一些配置,所以当应用程序在32位机器上启动时,读取其值时没有问题,但是当部署在64位机器上时,我无法正确读取值,因为注册表路径已更改。为了清楚起见,我在32位机器上有 我有注册表项如下。读取64位机器上的注册表
[HKEY_LOCAL_MACHINE\SOFTWARE\MyApplication\InstallationPath]
“文件夹”= “C:\ Program Files文件\ MyApplication的”
但是,当我看到一个64位的机器上,这是转移到:
[HKEY_LOCAL_MACHINE\SOFTWARE\**Wow6432Node**\MyApplication\InstallationPath]
“文件夹” =“C:\ Program Files \ MyApplication”
在我的应用程序中,我必须查询安装路径的值。我所做的显而易见的事情是使用硬编码字符串“HKLM \ SOFTWARE \ MyApplication \ InstallationPath”查询值,但对64位机器无效。
我该如何解决这个问题?
你不应该在你的代码中做任何特殊的事情。 32位应用程序透明地访问Wow6432Node
下的注册表部分。
要说服自己,请启动32位版本的regedit.exe(可在Windows\SysWOW64
下获取)并查看注册表。
我真的不明白你的问题:Wow6432Node
是从调用者的角度来看transparent。
这意味着从64位机器上运行的32位应用程序访问时,注册表项HKEY_LOCAL_MACHINE\SOFTWARE\MyApplication\InstallationPath
将自动映射到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyApplication\InstallationPath
。
因此,您的代码应该开箱即用。
查看REGSAM samDesired参数RegOpenKeyEx和许多其他注册表API。
对你最重要的一个是KEY_WOW64_64KEY:“表示在64位的Windows应用程序应该在64位注册表视图操作有关更多信息,请参阅Accessing an Alternate Registry View。”
您可以在32位应用程序中使用它来强制它检查64位系统上“本机”64位区域中的注册表项。 (您可能想检查您是否在64位Windows上运行,然后只通过该标志;我不确定它在32位计算机上会执行什么操作。如果希望默认处理,请将samDesired设置为零。 )