2010-10-22 91 views
1

我开发了一个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位机器无效。

我该如何解决这个问题?

回答

0

你不应该在你的代码中做任何特殊的事情。 32位应用程序透明地访问Wow6432Node下的注册表部分。

要说服自己,请启动32位版本的regedit.exe(可在Windows\SysWOW64下获取)并查看注册表。

1

我真的不明白你的问题:Wow6432Node是从调用者的角度来看transparent

这意味着从64位机器上运行的32位应用程序访问时,注册表项HKEY_LOCAL_MACHINE\SOFTWARE\MyApplication\InstallationPath将自动映射到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyApplication\InstallationPath

因此,您的代码应该开箱即用。

1

查看REGSAM samDesired参数RegOpenKeyEx和许多其他注册表API。

对你最重要的一个是KEY_WOW64_64KEY“表示在64位的Windows应用程序应该在64位注册表视图操作有关更多信息,请参阅Accessing an Alternate Registry View。”

您可以在32位应用程序中使用它来强制它检查64位系统上“本机”64位区域中的注册表项。 (您可能想检查您是否在64位Windows上运行,然后只通过该标志;我不确定它在32位计算机上会执行什么操作。如果希望默认处理,请将samDesired设置为零。 )