如果您使用的是 .NET 4,您可以专门请求您的 32 位(或 64 位)进程使用该方法访问注册表的 64 位视图RegistryKey.OpenBaseKey。
参照。http://msdn.microsoft.com/en-us/library/microsoft.win32.registrykey.openbasekey.aspx
这是一个从注册表的 64 位视图读取值的示例,即使它作为 32 位进程的一部分运行:
var hklm64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
var key = hklm.OpenSubKey(@"SOFTWARE\AcmeSoft\AnvilMaker 1.0");
var value = (string) key.GetValue("Blacksmith Name");
该RegistryKey.OpenBaseKey方法还允许您显式打开注册表的 32 位视图。如果您试图反过来并从 64 位进程访问注册表的 32 位视图,并且您不想显式地将“Wow6432Node”添加到注册表路径,这将很有用。
例如,今天我需要在注册表的 32 位和 64 位视图中删除一个子键树。在 .NET 4 中使用单个注册表路径执行此操作很容易:
foreach(var view in new[] {RegistryView.Registry32, RegistryView.Registry64})
{
var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, view);
hklm.DeleteSubKeyTree(@"SOFTWARE\AcmeSoft\SomeKeyWeNoLongerWant", throwOnMissingSubKey: false);
}
在 64 位版本的 windows 上,上述代码将从注册表中删除以下子键树:
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\AcmeSoft\SomeKeyWeNoLongerWant
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\AcmeSoft\SomeKeyWeNoLongerWant
-亚当