Читать значение реестра в C # - PullRequest
1 голос
/ 03 января 2012

У меня есть приложение c #, которое включает в себя код для получения значений реестра и проверки его значений values.registry, хранящихся следующим образом:

MainKey:

Name:user123
Isregistered:no

однако, если Isregistered возвращает «нет» , отобразится соответствующее сообщение.я получаю сообщение об ошибке, подобное этому

Ссылка на объект не установлена ​​для экземпляра объекта.

C # Код:

RegistryKey reg = Registry.LocalMachine.OpenSubKey(@"HKEY_CURRENT_USER\\MainKey", true);
string currentKey;
currentKey = reg.GetValue("Isregistered", true).ToString();
if (currentKey == "yes")
{
  Console.WriteLine("availble");
}
else
{
  Console.WriteLine("Not availble");
}

я получаю сообщение об ошибке "currentKey = reg.GetValue (" Isregistered ", true) .ToString ();"

Ответы [ 3 ]

3 голосов
/ 03 января 2012

Я вижу две проблемы в вашем коде:

1)

// You're searching for HKEY_CURRENT_USER in HKEY_LOCAL_MACHINE
// Use Registry.CurrentUser instead.
RegistryKey reg = Registry.LocalMachine.OpenSubKey(@"HKEY_CURRENT_USER\\MainKey", true);
string currentKey;
currentKey = reg.GetValue("Isregistered", true).ToString();

Узнайте больше о поле CurrentUser здесь

2) Другиеаспект заключается в том, что либо используйте @, либо \\ not в пути реестра.т.е.

OpenSubKey(@"HKEY_CURRENT_USER\MainKey", true);

или

OpenSubKey("HKEY_CURRENT_USER\\MainKey", true);

Подробнее о дословных строковых литералах здесь

2 голосов
/ 03 января 2012

Вы использовали @ и избежали обратной косой черты.Также вы захотите, чтобы текущий ключ не был нулевым.

Смотрите вызов GetValue здесь: http://msdn.microsoft.com/en-us/library/microsoft.win32.registry.getvalue.aspx

Удачи!

0 голосов
/ 03 января 2012

Вы пытаетесь открыть HKEY_CURRENT_USER, используя реестр LocalMachine.Вместо этого используйте Registry.CurrentUser.OpenSubKey (@ "MainKey", true).

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