如何打开从64位NET应用程序WOW64注册表项
题
我的.NET应用程序(任何-CPU)需要读取由一个32位的程序创建的注册表值。在64位Windows这正好在注册表中Wow6432Node项下。我看了,你不应该硬编码到Wow6432Node,所以有什么用.NET来访问它的正确方法?
解决方案
在这里显式需要在一个64位的程序来读取由一个32位的程序写入一个值的情况下,这是行向硬编码。很简单,因为实在是没有其他的选择。
的我当然抽象出来到一个辅助功能。例如
public RegistryKey GetSoftwareRoot() {
var path = 8 == IntPtr.Size
? @"Software\Wow6432Node"
: @"Software";
return Registry.CurrentUser.OpenSubKey(path);
}
其他提示
如果可以改变所述目标.NET版本到V4,则可以例如使用新OpenBaseKey功能
RegistryKey registryKey;
if (Environment.Is64BitOperatingSystem == true)
{
registryKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);
}
else
{
registryKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32);
}
正确的方法是调用本地注册表API并传递KEY_WOW64_32KEY
标志RegOpenKeyEx / RegCreateKeyEx
扩展的Anders的回答,有一个缠绕所得的很好的例子在沙哈尔Prish的博客一个.NET的RegistryKey对象句柄 - 一定要过,虽然阅读注释
不隶属于 StackOverflow