所以我使用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中。
所以,我显然错过了一些愚蠢的事情。具体到底我错过了什么?
答案 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()
可能只会获得您能够写入的内容。