Registry GetSubKeyNames()列出了与Regedit不同的密钥?

我们正在使用WIX来安装我们创建的许多服务。 我正在编写一个快速实用程序来转储当前安装的服务。 我只是迭代以下的子键:

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 

寻找DisplayName 。 问题是,我的十项服务中只有两项出现在列表中。

但是,当我查看Regedit中的子键时,它们就在那里。 同样,它们在已安装的程序中(我也可以在Win32_Product的SELECT *中找到它们)。

我浏览了MSDN文档,试图找出是否有一些我错过的注册表的特殊视图。 也许这是一个特权问题? 但我正在以管理员身份运行该工具。 是否有一些蜂巢安装问题?

为了清楚代码,这里是测试应用程序代码(来自这个答案 ):

 String registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; using(Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registryKey)) { foreach(String subkeyName in key.GetSubKeyNames()) Console.WriteLine(key.OpenSubKey(subkeyName).GetValue("DisplayName")); } 

有什么想法吗?

问题是32/64位问题。 似乎有些安装发生在

 HKEY_LOCAL_MACHINE\Software\Wow6432Node\... 

当我列举它们时,我得到了所有的安装。

显然我也可以将RegistryKey.OpenBaseKey()RegistryView.Registry64/32而不是使用Wow6432Node