В чем разница в реестре и кустах реестра - PullRequest
2 голосов
/ 24 марта 2012

Когда я запускаю следующую команду, rKey имеет два значения.

RegistryKey sqlServer = Registry.LocalMachine.OpenSubKey( @"SOFTWARE\Microsoft\Microsoft SQL Server", false);

Когда я запускаю одну из следующих команд (на том же компьютере, что и тот же пользователь), я не вижу значений;

 RegistryKey sqlServer64 = RegistryKey.OpenBaseKey( RegistryHive.LocalMachine, RegistryView.Registry64);

   RegistryKey sqlServer32 = RegistryKey.OpenBaseKey( RegistryHive.LocalMachine, RegistryView.Registry32 );

Может кто-нибудь указать мне ответ или описание кустов против простого доступа к реестру?

Edit: Что я делаю потом:

 StringBuilder sbKeys = new StringBuilder();

  foreach (var key in sqlServer.GetValueNames() )
  {
       sbKeys.AppendLine( key );
  }

Для всех ключей реестра. Для sqlServer я вижу два значения, для sqlServer32 и SqlServer64 значения отсутствуют.

1 Ответ

1 голос
/ 25 марта 2012

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

Вам нужно, чтобы это было так:

RegistryKey root = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey sqlServer = root.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server");
foreach (var key in sqlServer.GetValueNames())
{ .... }

Сделано таким образом, оно ничем не отличается от вашего первого варианта (кроме представления реестра). Я ожидаю, что использование соответствующего представления реестра приведет к решению вашего другого вопроса .

Естественно, вы захотите добавить проверку ошибок в приведенный выше код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...