GetSubKeyNames不返回所有键

时间:2015-01-08 11:14:56

标签: c# registry

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

我在 HKLM \ SOFTWARE \ MICROSOFT \ WINDOWS \ CURRENTVERSION \ UNINSTALL

下找到大部分信息

但是,例如,Dropbox不会出现在那里。 Dropbox位于 HKCU 下面,所以我也想读取这些键。简单,我想,导致路径是一样的,只是RegistryHive的变化。

问题

虽然当我使用GetSubKeyNames函数进入CurrentVersion时,我看不到键 UNINSTALL

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

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

3 个答案:

答案 0 :(得分:4)

我也遇到了这个问题,检查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);

答案 1 :(得分:1)

你可以使用:Registry.LocalMachine.OpenSubKey("你的钥匙在这里")。GetSubKeyNames()

但是尝试将平台目标更改为x86和x64。你会看到两个不同的结果。

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

答案 2 :(得分:0)

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

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