В реестре GetSubKeyNames () перечислены ключи, отличные от Regedit? - PullRequest
20 голосов
/ 24 июня 2010

Мы используем WIX для установки ряда создаваемых нами сервисов. Я пишу быструю утилиту для сброса установленных служб. Я просто перебираю подразделы:

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 

ищу DisplayName. Проблема в том, что в списке отображаются только две из моих десяти служб.

Однако, когда я смотрю на подразделы в Regedit, они там есть. Кроме того, они есть в установленных программах (и я могу найти их в SELECT * из Win32_Product).

Я просмотрел документы MSDN, пытаясь выяснить, есть ли какое-то особое представление реестра, которое мне не хватает. Может быть, это вопрос привилегий? Но я запускаю инструмент от имени администратора. Есть ли проблема с монтажом улья?

Для ясности с кодом, вот код тестового приложения (от этот ответ ):

String registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
using(Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registryKey))
{
  foreach(String subkeyName in key.GetSubKeyNames())
    Console.WriteLine(key.OpenSubKey(subkeyName).GetValue("DisplayName"));
}

Есть мысли по этому поводу?

1 Ответ

25 голосов
/ 30 июня 2010

Проблема в 32/64 битной проблеме. Похоже, что некоторые установки произошли под

HKEY_LOCAL_MACHINE\Software\Wow6432Node\... 

Когда я перечисляю их обоих, я получаю все свои установки.

Очевидно, я также могу использовать RegistryKey.OpenBaseKey() с RegistryView.Registry64/32 вместо Wow6432Node.

...