为什么OpenSubKey()在我的Windows 7 64位系统上返回null?

BrM*_*lin 23 .net registry 64-bit

当32位注册表项位于注册表中的Wow6432node时,OpenSubKey()和其他Microsoft.Win32注册表函数是否在64位系统上返回null?

我正在研究一个单元测试框架,它从.NET库调用OpenSubKey().

我的开发系统是安装了Visual Studio 2008 SP1和Windows 7 SDK 的Windows 7 64位环境.

我们单元测试的应用程序是一个32位应用程序,因此注册表是虚拟化的HKLM\Software\Wow6432node.当我们打电话:

Registry.LocalMachine.OpenSubKey( @"Software\MyCompany\MyApp\" );
Run Code Online (Sandbox Code Playgroud)

返回Null,但明确说明在这里工作:

Registry.LocalMachine.OpenSubKey( @"Software\Wow6432node\MyCompany\MyApp\" );
Run Code Online (Sandbox Code Playgroud)

根据我的理解,此功能应该与32位或64位环境无关,应该知道跳转到虚拟节点.

更奇怪的是,在我们的应用程序的编译和安装版本中完全相同的调用在同一系统上正常运行并且正在运行必需的注册表项; 也被放入HKLM\Software\Wow6432node.

我该怎么办?

Hei*_*nzi 22

听起来你的单元测试项目编译为64位.在Compile单元测试项目的设置中,将"目标CPU"设置为x86(而不是AnyCPU).

  • 啊哈!这确实是发生了什么.非常感谢你! (3认同)

nma*_*mat 9

如果您确实需要32位应用程序,则可以像下面这样访问64位注册表:

RegistryKey localMachine64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey regKey = localMachine64.OpenSubKey(@"Software\MyCompany\MyApp\", false);
Run Code Online (Sandbox Code Playgroud)