Подтвердить что ты не робот

Как открыть раздел реестра WOW64 из 64-разрядного приложения .NET

Мое приложение .NET(любой процессор) должно прочитать значение реестра, созданное 32-разрядной программой. В 64-битной Windows это происходит под ключом Wow6432Node в реестре. Я прочитал, что вы не должны жестко закодировать Wow6432Node, и как правильно обращаться к нему с .NET?

4b9b3361

Ответ 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