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

#c# #.net #registry #regedit

#c# #.net #реестр #regedit

Вопрос:

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

 for 64 bit path
***************
key = Registry.LocalMachine.OpenSubKey(@"SOFTWAREWOW6432NodeAppApp.INIAppName");

for 32 bit path
***************
key = Registry.LocalMachine.OpenSubKey(@"SOFTWAREAppApp.INIAppName");




  

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

Ответ №1:

Вы можете использовать RegistryView с одним из перечислений и OpenBaseKey с вашим исходным путем SOFTWAREAppApp.INIAppName в зависимости от вашей разрядности

Перечисление RegistryView

Указывает, на какое представление реестра следует ориентироваться в 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");
      }
   }
}
  

Комментарии:

1. Как я могу перенаправить на 64/32-разрядный путь, не определяя 2 разных пути?

2. @Michael: Оба ключа, показанные в вашем вопросе, находятся в 32-разрядном представлении реестра.