2012-01-26 4 views
2

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

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; 
+2

Вы работаете в процессе x86? –

+0

Ваш код работает на Windows 7 - 32 бит –

+0

Хорошая точка - если ваш процесс является 4-битным, то этот путь будет: HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Authentication \ LogonUI \ Background –

ответ

4

Я подозреваю, что вы работаете на 64-битной машине, но в качестве 32-разрядного процесса. That значение вероятно, не существует в вашем 32-битном реестре, но в 64-битном реестре (это, безусловно, имеет место на моем). Вам, вероятно, потребуется получить доступ к 64-битовому улью, чтобы он мог прочитать это значение. t является проблемой из 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); 
} 
+0

ps, вам нужно будет работать на .NET 4, чтобы получить альтернативный вид, как показано здесь. Если нет, вы, вероятно, захотите явно указать x64, чтобы получить значение. –

+0

Спасибо! Только то, что мне было нужно. Могу ли я сделать то же самое в основном для доступа к Windows \ System32 на 64-битной системе из 32-битного процесса? – Usta

+0

Несомненно, я не вижу причин, почему ты не мог. –

Смежные вопросы