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