Registry GetSubKeyNames () listuje inne klucze niż Regedit?

Używamy WIX do instalacji wielu usług, które tworzymy. Piszę szybkie narzędzie do zrzutu aktualnie zainstalowanych usług. Po prostu iteruję nad podkluczami:

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 

Szukam DisplayName. Problem w tym, że tylko dwie z moich dziesięciu usług pojawiają się na liście.

Jednak, gdy patrzę na podklucze w Regedit, są tam. Jak również, są one w zainstalowanych programach (i mogę je znaleźć w SELECT * z Win32_Product zbyt).

Przejrzałem dokumenty MSDN, próbuje dowiedzieć się, czy istnieje jakiś specjalny widok rejestru, że brakuje. Może to kwestia przywilejów? Ale uruchamiam narzędzie jako admin. Czy jest jakiś problem z montażem ula?

Żeby było jasne z kodem, oto kod aplikacji testowej (z ta odpowiedź):

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"));
}
Jakieś przemyślenia na ten temat?
Author: Community, 2010-06-24

1 answers

Problem jest problemem 32/64 bitowym. Wydaje się, że niektóre instalacje miały miejsce pod

HKEY_LOCAL_MACHINE\Software\Wow6432Node\... 

Kiedy wymieniam je obie, dostaję wszystkie moje instalacje.

Najwyraźniej mogę też użyć RegistryKey.OpenBaseKey() z RegistryView.Registry64/32 zamiast Wow6432Node.

 25
Author: teleball,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-28 15:42:47