这是代码:
var b1 = Registry.LocalMachine.OpenSubKey("software", true);
var b2 = Registry.LocalMachine.OpenSubKey("software", true).OpenSubKey("company");
var r1 = Registry.LocalMachine.OpenSubKey("software").OpenSubKey("company").GetValueNames();
string resultString = Registry.LocalMachine.OpenSubKey("Software", true).CreateSubKey("company").GetValue(name).ToString();
我使用name
= "ApplicationDirectory"
调用它。在最后一行,前两个变量指向正确的位置(基于它们的Name
属性)。问题在于r1
,它不会列出HKEY_LOCAL_MACHINE\SOFTWARE\company
的内容,而是HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\company
。为什么是这样?这是64位机器中的一些重定向吗?
答案 0 :(得分:2)
是的,在64位计算机上有32位应用程序的重定向。查看有关您问题的评论,以及this SO answer。
如果您的目标是.Net 4或更高版本,您将能够访问Wow6432Node
(用于32位应用程序)和“标准”节点(用于64位应用程序的节点){ {3}}方法提供了RegistryKey.OpenBaseKey类型的参数,允许选择要使用的正确节点。
如果您使用的是.Net 3.5或以前的版本,那么如果您希望能够在64位计算机上读取两个32/64位注册表项,则必须使用P / Invoke。您必须使用RegistryView并指定KEY_WOW64_32KEY
作为所需访问的标记。但这是另一个故事,超出了你的问题的范围。