#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
в зависимости от вашей разрядности
Указывает, на какое представление реестра следует ориентироваться в 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-разрядном представлении реестра.