AlexaRS Ответов: 2

Проверьте, существует ли путь к реестру C#


Привет,

Я пытаюсь понять, как работает реестр в c#.

Все примеры, которые я нашел, в значительной степени одинаковы, но в результате я всегда получаю null, и я уверен, что путь к реестру действительно существует.

Например, я хочу проверить, существует ли этот раздел реестра (путь) :

Программное обеспечение\Microsoft\Windows\CurrentVersion\WindowsUpdate под HKLM.

Я не ищу строки или значения, просто если ключ существует или нет.

Спасибо вам всем за ваши предложения.

Что я уже пробовал:

var key = реестр.Местная машина.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate");
if (key == null)
{
// Не существовать
}
еще
{
// Существует
}

RickZeeland

Вы компилируете для 32 или 64 бит ? это может иметь значение для того, какой реестр используется.

AlexaRS

Привет, это 32-битный

AlexaRS

Стог,

он работает как x64, но мне он нужен в x86

2 Ответов

Рейтинг:
2

Richard Deeming

Цитата:
он работает как x64, но мне он нужен в x86

Вам необходимо указать RegistryView что вы хотите получить доступ:
using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
using (var key = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate"))
{
    if (key == null)
    {
        // Doesn't exist...
    }
    else
    {
        // Exists...
    }
}
Перечисление RegistryView (Microsoft.Win32) | Microsoft Docs[^]


[no name]

+5

Рейтинг:
2

phil.o

Доступ к чему-либо в реестре, который не находится в улье CURRENT_USER, требует административного доступа.
Попробуйте запустить программу от имени администратора и посмотрите, решит ли это вашу проблему.


AlexaRS

Привет, Фил.

это то же самое поведение, я локальный администратор, Я отключил UAC, запускаю как администратор, но он равен нулю.

Тем временем я заметил, что могу дотянуться
Программное обеспечение\Microsoft\окна\CurrentVersion равное, но не программное обеспечение\Microsoft\окна\CurrentVersion равное\файл WindowsUpdate, очень странно

С другой стороны, у меня есть PS-скрипт, который отлично работает и может достичь всех ключей в узле.

phil.o

Если вы проверите права доступа к указанному ключу, то можете обнаружить, что он имеет специальные права доступа, которые мешают вам его прочитать.
Я проверил на Windows 7, мой, похоже, не защищен. Это можно было бы изменить в более поздних версиях.

AlexaRS

Это не проблема с разрешениями. Проверено, локальные администраторы имеют полный контроль, и я могу редактировать подразделы и значения через regedit.

phil.o

Как предложил Рик, попробуйте скомпилировать свою программу в 64-битном формате и посмотрите, изменится ли результат.

AlexaRS

да, он действительно получает подразделы. но мне это нужно в x86.

phil.o

Затем следите за ключевым программным обеспечением\Wow6432Node\Microsoft\Windows\CurrentVersion\WindowsUpdate ; проверьте его разрешения.

AlexaRS

Спасибо, попробую это сделать