GetSubKeyNames 不返回所有键

FRu*_*les 5 c# registry

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

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

但是,例如 Dropbox,不会出现在那里。Dropbox 位于HKCU下,所以我也想阅读这些密钥。很简单,我想,因为路径是一样的,只是 RegistryHive 发生了变化。

问题

当我在 CurrentVersion 中使用函数 GetSubKeyNames 时,我看不到键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
Run Code Online (Sandbox Code Playgroud)

我也用 RegistryView.Registry64 尝试了这个 - 我得到了相同的结果。

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

Device Metadata
Explorer
Group Policy
GrpConv
Internet Settings
Media Center
Run
Shell Extensions
Telephony
ThemeManager
WinTrust
Run Code Online (Sandbox Code Playgroud)

有谁知道我该如何解决这个问题?

Jim*_*myV 7

我也遇到了这个问题,检查 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);
Run Code Online (Sandbox Code Playgroud)


小智 1

您可以使用:Registry.LocalMachine.OpenSubKey("Your Key Here").GetSubKeyNames()

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

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