Как автоматически получить ключ реестра для 64/32-битных машин при запуске приложения? - PullRequest
1 голос
/ 12 апреля 2019

В моем приложении мне нужно прочитать имя раздела реестра другого приложения, т.е. установленного как на 32-битных, так и на 64-битных компьютерах с Windows. Как я могу прочитать имена разделов реестра с 64/42-битного пути?

for 64 bit path
***************
key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\App\App.INI\AppName");

for 32 bit path
***************
key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\App\App.INI\AppName");




Мне нужно сделать это как общий код для обоих путей. Если это 64-битная машина, необходимо автоматически получить путь до узла wow6432. Есть ли способ сделать это?

1 Ответ

0 голосов
/ 12 апреля 2019

Вы можете использовать RegistryView с одним из Enums и OpenBaseKey с вашим исходным путем SOFTWARE\App\App.INI\AppName в зависимости от вашей разрядности

RegistryView Enum

Указывает, какое представление реестра следует использовать в 64-разрядной операционной системе.

В 64-разрядной версии Windows части реестра хранятся отдельно для 32-разрядных и 64-разрядных систем.приложения.Существует 32-разрядное представление для 32-разрядных приложений и 64-разрядное представление для 64-разрядных приложений.

Пример

using (var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
{
   using (var subKey = baseKey.OpenSubKey("blah", RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.FullControl))
   {
      if (subKey != null)
      {
         var value =  subKey.GetValue("Somekey");
      }
   }
}
...