Получить значение реестра C # - PullRequest
2 голосов
/ 26 января 2012

Я не могу заставить мою программу правильно читать реестр.Ниже приведен мой текущий код, но я пробовал и другие.Он компилируется и запускается, но всегда возвращает ноль.(Я дважды проверил в реестре, и значение установлено в единицу. "0x000000001 (1)" Ключ, к которому я пытаюсь получить доступ, - DWord , и значение должно быть только 1 или 0 . Я работаю как admin , поэтому у меня есть права полного доступа. Что я делаю не так?

Registry.LocalMachine.OpenSubKey( "SOFTWARE", true );
RegistryKey masterKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Authentication\\LogonUI\\Background");
string value = "";
if( masterKey != null )
{
    value = masterKey.GetValue( "OEMbackground", 2 ).ToString();
}
masterKey.Close();
myLabel.Text=value;

1 Ответ

4 голосов
/ 26 января 2012

Я подозреваю, что вы работаете на 64-битной машине, но как 32-битный процесс. Это значение, вероятно, не существует в вашем 32-разрядном реестре, но в 64-разрядном реестре (это, безусловно, относится к моему) Вам, вероятно, понадобится получить доступ к 64-битному кусту, чтобы иметь возможность прочитать это значение. Это не должно быть проблемой 32-битного процесса.

const string keyPath = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background";
using (var hklm64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
using (var key = hklm64.OpenSubKey(keyPath))
{
    var value = (int)key.GetValue("OEMBackground", 2);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...