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
。