2015-01-08 4 views
0

Я хочу, чтобы программное обеспечение было установлено на клиенте. Я также использую WMI и реестр.GetSubKeyNames не возвращает все ключи

Я нахожу большую часть информации при HKLM \ SOFTWARE \ MICROSOFT \ Windows \ CurrentVersion \ Uninstall

Однако, Dropbox, например, не появляется там. Dropbox находится под HKCU, поэтому я хочу также прочитать эти ключи. Простой, я думал, причина, что путь тот же, только изменения RegistryHive.

Проблема

Я не могу увидеть ключ УДАЛИТЬ, хотя, когда я нахожусь в 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

Это может быть по соображениям безопасности. Попробуйте выполнить повышенные привилегии. –

+0

Ваш комментарий был полезен. Я запускал приложение в качестве системного пользователя, у которого нет этого ключа, так как это текущий пользователь. Я буду проходить через HKEY_USERS, где теперь есть ключ Uninstall. Таким образом, я получаю программное обеспечение всех пользователей. Спасибо тебе, друг. – FRules

ответ

1

Вы можете использовать:. Registry.LocalMachine.OpenSubKey ("Ваш ключ здесь") GetSubKeyNames()

Но попробуйте изменить целевую платформу для x86 и x64. Вы увидите два разных результата.

Изменить цель платформы: Перейти к проекту -> Свойства -> Сборка -> Цель платформы Попробуйте настроить это на X86, распечатать результаты. Затем установите значение x64, напечатайте результаты

3

Я столкнулся с этой проблемой, проверяя работу 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); 
Смежные вопросы