C# 我添加了一个注册表项,但无法通过编程方式找到它
因此,我使用RegEdit将以下内容添加到工作站上的注册表中: HKLM\Software\Foo\Bar 酒吧有一个k/v对“wtf”/“idk”。我通过关闭regedit并重新打开它来验证这些更改是否“生效”。嘿,他们还在那儿!膨胀C# 我添加了一个注册表项,但无法通过编程方式找到它,c#,registry,registrykey,C#,Registry,Registrykey,因此,我使用RegEdit将以下内容添加到工作站上的注册表中: HKLM\Software\Foo\Bar 酒吧有一个k/v对“wtf”/“idk”。我通过关闭regedit并重新打开它来验证这些更改是否“生效”。嘿,他们还在那儿!膨胀 RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Foo\Bar"); if (key != null) { var = key.GetValue("wtf").ToString
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Foo\Bar");
if (key != null)
{
var = key.GetValue("wtf").ToString();
}
问题是,密钥为空
当
Registry.LocalMachine.OpenSubKey("Software").GetSubKeyNames()
调用时,Foo不会出现在多个子关键字中
所以,我显然错过了一些愚蠢的事情。我具体遗漏了什么?可能是x64问题?在x86进程中从注册表读取数据时,系统会将您重定向到软件\wow6432节点。如果您在64位版本的Windows上运行32位进程,则32位进程(您的测试应用程序)并不总是能够看到您使用64位regedit创建的键 尝试以64位方式运行应用程序,或使用regedit使用路径
HKLM\SOFTWARE\Wow6432Node\Foo\Bar
打开密钥
您可以在MSDN上阅读更多信息。尝试以只读方式打开它。Registry.LocalMachine.OpenSubKey(“Software”,false)。GetSubKeyNames()可能您只获得了可以写入的内容。您和Reizebosch是正确的;这是一个x64操作系统,但该程序以32位应用程序的形式运行,并且它是从Wow6432Node读取的;我可以给钥匙写信。