Подтвердить что ты не робот

Registry GetSubKeyNames() содержит список ключей, отличных от Regedit?

Мы используем 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"));
}

Любые мысли об этом?

4b9b3361

Ответ 1

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

HKEY_LOCAL_MACHINE\Software\Wow6432Node\... 

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

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