如何打开从64位NET应用程序WOW64注册表项如何打开从64位NET应用程序WOW64注册表项(H

2019-05-14 12:04发布

我的.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