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

时间:2010-06-24 17:01:19

标签: c# wix registry

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

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 

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

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

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

为了清楚代码,这里是测试应用代码(来自this answer):

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"));
}

对此有何想法?

1 个答案:

答案 0 :(得分:25)

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

之下
HKEY_LOCAL_MACHINE\Software\Wow6432Node\... 

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

显然,我也可以RegistryKey.OpenBaseKey()使用RegistryView.Registry64/32代替Wow6432Node