我的.NET应用程序(任何-CPU)需要读取由一个32位的程序创建的注册表值。 在64位Windows这正好在注册表中Wow6432Node项下。 我看了,你不应该硬编码到Wow6432Node,所以有什么用.NET来访问它的正确方法?
Answer 1:
在你明确地需要在64位程序读取由一个32位的程序写入值的情况下,这是确定以硬编码。 很简单,因为实在是没有其他选择。
我当然抽象出来的一个辅助功能。 例如
public RegistryKey GetSoftwareRoot() {
var path = 8 == IntPtr.Size
? @"Software\Wow6432Node"
: @"Software";
return Registry.CurrentUser.OpenSubKey(path);
}
Answer 2:
如果你可以改变目标.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);
}
Answer 3:
正确的方法是调用本机注册表API和传递KEY_WOW64_32KEY
标志RegOpenKeyEx / RegCreateKeyEx
Answer 4:
扩展安德斯的回答,有一个在沙哈尔Prish的博客一个.NET的RegistryKey对象包装所产生的手柄的很好的例子 -一定要过,虽然阅读注释。
需要注意的是质朴的使用RegOpenKeyEx的pinvoke.net包装充满了问题。
文章来源: How to open a WOW64 registry key from a 64-bit .NET application