Почему я не могу прочитать этот раздел реестра в C# - PullRequest
0 голосов
/ 16 февраля 2020

Проблема

  • Я не могу прочитать с ключа HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SystemProtectedUserData\S-1-5-21-436374069-1965331169-839522115-50811\AnyoneRead\LockScreen.

Использование кода:

Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SystemProtectedUserData\S-1-5-21-436374069-1965331169-839522115-50811\AnyoneRead\LockScreen", "", null);

Диагностика проблемы

  • Я получаю исключение System.NullReferenceException при выполнении кода, подобного тому, как ключ не завершается, но я знаю, что он существует, потому что я могу просмотреть его в regedit.

  • I Я попытался стать владельцем ключа.

  • Я попытался просмотреть подразделы родительского ключа (CurrentVersion). В родительском сканировании даже не было показано, что ключ SystemProtectedUserData совпадает с ключом прямо под TabletP C.

Я предполагаю, что это какая-то проблема с разрешениями, но я не знаю, как ее исправить.

Любая помощь приветствуется.

Ответы [ 2 ]

3 голосов
/ 16 февраля 2020

Ваш метод Registry.GetValue возвращает null, поскольку он не может найти указанный ключ или значение, а значение по умолчанию (третий аргумент) установлено на null. Согласно документации, этот метод не может выдать NullReferenceException, кажется, что его вызывает вызывающий код.

Итак, вы можете попытаться указать имя значения (в конце я вижу только значение OSVersion ) или другое значение по умолчанию.

Если проблема все еще существует, проблема может быть в перенаправлении на узел реестра WOW6432Node в редакции x64 Windows. Вы можете избежать этого с помощью следующего кода, используя метод OpenBaseKey и указав значение RegistryView

var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
var key = baseKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\SystemProtectedUserData\S-1-5-21-...\AnyoneRead\LockScreen");
var value = key.GetValue("OSVersion"); //for example
0 голосов
/ 16 февраля 2020

Вы не определили valueName, поэтому он возвращает значение по умолчанию, которое вы установили на ноль.

Проверьте документацию . (Более конкретно, вы определили его как string.Empty, которое не является допустимым именем. Может быть LockScreen - это имя значения / переменная реестра? - Я не говорю android)

...