RegistryKey.GetSubKeyNames выдает IOException

При использовании RegistryKey.GetSubKeyNames возникает исключение IOExeption. брошенный:

«Больше данных нет»

Вот соответствующий код:

string subKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products";
RegistryKey key = Registry.LocalMachine.OpenSubKey( subKey );
string[] keys = key.GetSubKeyNames(); // throws IOException here

Характеристики

  • Win7 x64
  • VS 2010 SP1
  • .NET 3.5

Исключение возникает при использовании типа сборки «Любой ЦП»; при использовании типа сборки "x86" код выполняется, как и ожидалось, но считывает ключи из "Wow6432Node" вместо пути SubKey, указанного в определенной выше строковой переменной subKey.

Вопрос в следующем: как я могу прочитать все подключи в пути subKey, определенном выше, в 64-разрядной системе (не Wow6432Node)?

Обратите внимание: когда я запускаю тот же код в другой 64-битной системе, код выполняется без ошибок. Я почти склонен думать, что у меня где-то поврежден ключ реестра? Если да, то какие идеи о том, как я могу найти поврежденный ключ?


person Metro Smurf    schedule 18.04.2011    source источник


Ответы (1)


Передайте соответствующие RegistryView в RegistryKey.OpenBaseKey().

Например:

RegistryKey tempRegKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server");
person Aliostad    schedule 18.04.2011
comment
OpenBaseKey похоже на метод 4.0. Я должен был указать .NET 3.5. Тем не менее, я провел тест под 4.0, используя OpenBaseKey, и возникло такое же исключение, когда данных больше нет. Что странно, так это то, что я могу сосчитать ключи; но не перечисление имен ключей. - person Metro Smurf; 18.04.2011
comment
Я полный администратор системы. Я пытался сбросить все разрешения для SubKey и чтобы дочерние ключи наследовали разрешения, но это не удалось с ошибкой, например, не все ключи могут быть обновлены. Существует более 200 подключей, и необходимость вручную проверять разрешение каждого из них будет PITA. Я сбрасывал около 1/10 из них вручную... это медленно. - person Metro Smurf; 19.04.2011
comment
Я не мог понять, почему подразделы не могли быть прочитаны. В конце концов, я должен был сделать вывод, что мой реестр был поврежден. Хотя ответ @Alistad не дал решения, я принял его, поскольку это был единственный опубликованный ответ. - person Metro Smurf; 26.05.2011