Как открыть раздел реестра WOW64 из 64-bit.NET применение
моему приложению .NET (any-CPU) необходимо прочитать значение реестра, созданное 32-разрядной программой. В 64-разрядной Windows это происходит под ключом Wow6432Node в реестре. Я читал, что вы не должны жестко кодировать Wow6432Node, так каков правильный способ доступа к нему с помощью .NET?
4 ответов
в случае, когда вам явно нужно прочитать значение, написанное 32-битной программой в 64-битной программе, это нормально для жесткого кода. Просто потому, что другого выхода нет.
Я бы, конечно, абстрагировал его от вспомогательной функции. Например
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
расширение ответа Андерса, есть хороший пример упаковки результирующего дескриптора в объект .NET RegistryKey в блоге Шахара Приша - обязательно прочитайте комментарии тоже.
обратите внимание, что неприкрашенное использование pinvoke.net обертка RegOpenKeyEx чревато проблемами.