Regedit显示未使用GetSubKeyNames()列出的键

我已经检查了一些关于SO的其他回复,但据我所知,这是一个与我得到的命中不同的问题。

当我打开RegEdit时,我可以看到一组键,但是当我从我的程序中列出它们时使用例如:

Registry.LocalMachine.OpenSubKey(@"SOFTWARE").GetSubKeyNames() 

其中一些人失踪了。 我认为这可能与访问权限有关,所以我检查了.CurrentUser 。 在那里可以体验到相同的行为。 一些子键未列出。

我错过了什么?

你的OS x64? 如果是这种情况,对于“LocalMachine \ Software”,有两个不同的节点:X64应用程序的Normal和x86应用程序的Wow6432Node。

用于演示上述内容的示例应用程序。

 using System; using Microsoft.Win32; namespace ConsoleApplication1 { internal class Program { public static void Main() { String[] values = Registry.LocalMachine.OpenSubKey(@"SOFTWARE").GetSubKeyNames(); foreach (String value in values) Console.WriteLine(value); } } } 

当在x86中构建控制台应用程序时,这是我的机器上代码的输出:

土砖
AGEIA Technologies
酒精软
Apple Computer,Inc。
苹果公司。
傲锐
查杀
Azureus的
BazisSoft
C07ft5Y
教规
思杰

当控制台应用程序在x64中构建时,这是我的机器上的输出:

的7-Zip
AGEIA Technologies
Apple Computer,Inc。
苹果公司。
ATI Technologies
教规

客户端

如您所见,根据应用程序是x86还是x64,输出会有很大差异。

编辑:之前在StackOverflow上提出了类似的问题 。