我添加了一个注册表项,但我无法以编程方式找到它

时间:2011-09-09 15:12:08

标签: c# registry registrykey

所以我使用RegEdit将以下内容添加到我的工作站上的注册表中:

HKLM \ SOFTWARE \富\酒吧

Bar有一对k / v对“wtf”/“idk”。我通过关闭注册表并重新打开它来验证这些更改“采取了”。嘿,他们还在那里!溶胀。

RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Foo\Bar");

if (key != null)
{
    var = key.GetValue("wtf").ToString();
}

问题是,key为null。

当。 。

Registry.LocalMachine.OpenSubKey("Software").GetSubKeyNames()

被调用,Foo不会出现在多个SubKeyNames中。

所以,我显然错过了一些愚蠢的事情。具体到底我错过了什么?

3 个答案:

答案 0 :(得分:11)

如果您在64位版本的Windows上运行32位进程,则32位进程(您的测试应用程序)并不总是能够看到您使用64位regedit创建的密钥。

尝试将您的应用程序作为64位运行,或使用regedit使用路径HKLM\SOFTWARE\Wow6432Node\Foo\Bar打开密钥。

您可以在MSDN上阅读有关32-bit and 64-bit application data in the registry的更多信息。

答案 1 :(得分:4)

可能是x64问题?在x86进程中从注册表中读取时,您将被重定向到Software \ Wow6432node。

答案 2 :(得分:1)

尝试将其打开为只读Registry.LocalMachine.OpenSubKey("Software", false).GetSubKeyNames()可能只会获得您能够写入的内容。