GetSubKeyNames 不会返回所有键

本文关键字:返回 GetSubKeyNames | 更新日期: 2023-09-27 18:36:47

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

我在 HKLM''软件''MICROSOFT''WINDOWS''当前版本''卸载下找到大部分信息

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

问题

当我在当前版本中使用函数 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

我也用注册表视图.注册表64尝试了这个 - 我得到了相同的结果。

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

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

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

GetSubKeyNames 不会返回所有键

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

:Registry.LocalMachine.OpenSubKey("Your Key Here")。GetSubKeyNames()

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

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

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

这是非常特定于安装程序的问题。