C# GetSubKeyNames不会返回所有键

C# GetSubKeyNames不会返回所有键,c#,registry,C#,Registry,我想在客户端安装软件。我也使用WMI和注册表 我在HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNINSTALL下找到了大部分信息 但是,Dropbox(例如)并没有出现在那里。Dropbox位于HKCU的下方,因此我也想阅读这些键。我想,这很简单,因为路径是相同的,只是注册表配置单元发生了变化 问题 当我在CurrentVersion中使用函数GetSubKeyNames时,我看不到键卸载 var root = RegistryKey.Open

我想在客户端安装软件。我也使用WMI和注册表

我在HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNINSTALL下找到了大部分信息

但是,Dropbox(例如)并没有出现在那里。Dropbox位于HKCU的下方,因此我也想阅读这些键。我想,这很简单,因为路径是相同的,只是注册表配置单元发生了变化

问题

当我在CurrentVersion中使用函数GetSubKeyNames时,我看不到键卸载

var root = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry32)

var key = root.OpenSubKey(@"SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION") // works
var key = root.OpenSubKey(@"SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\Uninstall") // doesnt work
我还尝试了RegistryView.Registry64,得到了相同的结果

使用GetSubKeyNames时打印出的内容如下:

Device Metadata
Explorer
Group Policy
GrpConv
Internet Settings
Media Center
Run
Shell Extensions
Telephony
ThemeManager
WinTrust

有人知道我如何解决这个问题吗

您可以使用:Registry.LocalMachine.OpenSubKey(“此处的您的键”).GetSubKeyNames()

但尝试将平台目标同时更改为x86和x64。您将看到两种不同的结果

要更改平台目标: 转到项目->属性->构建->平台目标
尝试将其设置为X86,打印结果。然后设置为x64,打印结果

我也遇到了这个问题,检查了32位和64位视图是否正常工作

        var HKLM32 = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "computername", RegistryView.Registry32);
        var HKLM64 = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "computername", RegistryView.Registry64);
        key32 = HKLM32.OpenSubKey(registryKeytoFind);
        key64 = HKLM64.OpenSubKey(registryKeytoFind);

我遇到了完全相同的问题,但问题也在于是安装人员执行了C#函数。当然,在安装过程中,所需密钥不存在,因为它没有安装


这是安装程序特有的问题。

可能是出于安全原因。尝试以提升的权限运行。您的评论很有帮助。我以系统用户的身份运行应用程序,该系统用户没有此密钥,因为这是当前用户。从现在起,我将遍历存在卸载密钥的HKEY_用户。这样我就得到了所有用户的软件。谢谢你,伙计。别忘了处理这些,或者最好在using语句中使用它们。