GetSubKeyNames не возвращает все ключи
Я хочу, чтобы программное обеспечение было установлено на клиенте. Я также использую WMI и реестр.
Я нахожу большую часть информации в HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNINSTALL
Однако Dropbox, например, там не отображается. Dropbox находится под HKCU, поэтому я хочу также прочитать эти ключи. Простой, я думал, причина, что путь тот же, только изменения RegistryHive.
Проблема
Я не вижу ключа UNINSTALL, хотя, когда я в 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
Кто-нибудь знает, как я могу исправить эту проблему?
Ответы
Ответ 1
Я столкнулся с этой проблемой, проверяя работу 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);
Ответ 2
Вы можете использовать: Registry.LocalMachine.OpenSubKey( "Ваш ключ здесь" ). GetSubKeyNames()
Но попробуйте изменить цель платформы как на x86, так и на x64. Вы увидите два разных результата.
Чтобы изменить цель платформы:
Перейти к проекту → Свойства → Сборка → Цель платформы
Попробуйте настроить это на X86, распечатать результаты. Затем установите значение x64, напечатайте результаты