我们正在使用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太多.