我们正在使用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"));
}
对此有何想法?
答案 0 :(得分:25)
问题是32/64位问题。似乎有些安装发生在
之下HKEY_LOCAL_MACHINE\Software\Wow6432Node\...
当我列举它们时,我得到了所有的装置。
显然,我也可以RegistryKey.OpenBaseKey()
使用RegistryView.Registry64/32
代替Wow6432Node
。