Реестр GetSubKeyNames () перечисляет различные ключи, чем Regedit?

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

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 

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

Однако, когда я смотрю на подразделы в Regedit, они там. Также, они находятся в установленных программах (и я могу найти их в ВЫБОРЕ * от 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"));
}

Какие-либо мысли об этом?

21
задан Community 23 May 2017 в 11:53
поделиться

1 ответ

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

HKEY_LOCAL_MACHINE\Software\Wow6432Node\... 

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

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

27
ответ дан 29 November 2019 в 21:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: