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

tel*_*all 21 c# registry wix

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

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 
Run Code Online (Sandbox Code Playgroud)

寻找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"));
}
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

tel*_*all 27

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

HKEY_LOCAL_MACHINE\Software\Wow6432Node\... 
Run Code Online (Sandbox Code Playgroud)

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

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