【发布时间】:2010-03-17 17:18:39
【问题描述】:
当 32 位注册表项位于注册表中的 Wow6432node 下时,OpenSubKey() 和其他 Microsoft.Win32 注册表函数是否在 64 位系统上返回 null?
我正在开发一个从 .NET 库调用 OpenSubKey() 的单元测试框架。
我的开发系统是 Windows 7 64 位环境,安装了Visual Studio 2008 SP1 和 Windows 7 SDK。
我们正在单元测试的应用程序是一个 32 位应用程序,因此注册表是在HKLM\Software\Wow6432node 下虚拟化的。当我们调用时:
Registry.LocalMachine.OpenSubKey( @"Software\MyCompany\MyApp\" );
返回 Null,但明确说明看这里有效:
Registry.LocalMachine.OpenSubKey( @"Software\Wow6432node\MyCompany\MyApp\" );
据我了解,此函数应该与 32 位或 64 位环境无关,并且应该知道跳转到虚拟节点。
更奇怪的是,在我们的应用程序的编译和安装版本中完全相同的调用在同一系统上运行得很好,并且正在获取运行所需的注册表项;它们也被放置在HKLM\Software\Wow6432node。
我该怎么办?
【问题讨论】:
-
跟进:事实证明我们根本不需要创建新的平台目标。我们通过 nunit 运行测试,它分发 x86 特定的可执行文件。使用 x86 特定的可执行文件允许测试访问注册表而无需更改框架。