Мое приложение .NET(любой процессор) должно прочитать значение реестра, созданное 32-разрядной программой. В 64-битной Windows это происходит под ключом Wow6432Node в реестре. Я прочитал, что вы не должны жестко закодировать Wow6432Node, и как правильно обращаться к нему с .NET?
Как открыть раздел реестра WOW64 из 64-разрядного приложения .NET
Ответ 1
В случае, когда вам явно нужно прочитать значение, написанное 32-разрядной программой в 64-битной программе, нажмите ОК, чтобы жестко закодировать ее. Просто потому, что другого варианта нет.
Я бы, конечно, выделил его на вспомогательную функцию. Например
public RegistryKey GetSoftwareRoot() {
var path = 8 == IntPtr.Size
? @"Software\Wow6432Node"
: @"Software";
return Registry.CurrentUser.OpenSubKey(path);
}
Ответ 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);
}
Ответ 3
Правильный способ - вызвать собственный атрибут api и передать флаг KEY_WOW64_32KEY
в RegOpenKeyEx/RegCreateKeyEx
Ответ 4
Расширение Anders отвечает, там хороший пример обертывания результирующего дескриптора в объекте .NET RegistryKey в блоге Shahar Prish - обязательно прочитайте комментарии тоже.
Обратите внимание, что неприкрашенное использование оболочки pinvoke.net в RegOpenKeyEx чревато проблемами.