Если вы используете .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");
The *Метод 1012 * также позволяет явно открыть 32-битное представление реестра.Это полезно, если вы пытаетесь пойти по другому пути и получить доступ к 32-разрядному представлению реестра из 64-разрядного процесса, и вы не хотите явно добавлять "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
-Адам