获取注册表值C#

时间:2012-01-26 04:03:25

标签: visual-studio-2010 c#-4.0 registry

我似乎无法让我的程序正确读取注册表。下面是我目前的代码,但我也尝试了其他的东西。它编译并运行,但它总是返回零。 (我在注册表中进行了双重检查,并将值设置为1。“0x000000001(1)”我尝试访问的密钥是 DWord ,值应该只是< strong> 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 个答案:

答案 0 :(得分: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);
}