Мы используем 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"));
}
Какие-либо мысли об этом?
Проблема связана с 32/64 битной версией. Похоже, что некоторые установки произошли под
HKEY_LOCAL_MACHINE\Software\Wow6432Node\...
Когда я перечисляю их обе, я получаю все мои установки.
Очевидно, я также могу использовать RegistryKey.OpenBaseKey()
с RegistryView.Registry64/32
вместо Wow6432Node
.