我似乎无法让我的程序正确读取注册表。下面是我目前的代码,但我也尝试了其他的东西。它编译并运行,但它总是返回零。 (我在注册表中进行了双重检查,并将值设置为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;
答案 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);
}