2012-01-26 61 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 \微軟\的Windows \ CurrentVersion \認證\ LogonUI \背景 – 2012-01-26 04:20:13

回答

4

我懷疑你是一個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); 
} 
+0

PS,你」需要在.NET 4上運行以獲得如下所示的備用視圖。如果不是的話,你可能會想要明確地定位到x64以獲得該值。 –

+0

謝謝!正是我需要的。 我可以做基本相同的事情來訪問從32位進程的64位系統上的Windows \ System32? – Usta

+0

當然,我不明白爲什麼你不能。 –