2010-06-24 8 views
20

Używamy WIX do zainstalowania wielu usług, które tworzymy. Piszę szybkie narzędzie do zrzutu aktualnie zainstalowanych usług. Po prostu powtarzam następujące podklucze:Rejestr GetSubKeyNames() zawiera różne klucze niż Regedit?

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 

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

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

Przeglądałem dokumenty MSDN, próbując dowiedzieć się, czy jest jakiś specjalny widok rejestru, którego mi brakuje. Może to kwestia przywilejów? Ale używam tego narzędzia jako administrator. Czy jest jakiś problem z montowaniem ula?

Wystarczy być jasne, z kodem, tutaj jest test kod aplikacji (od this answer):

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")); 
} 

Wszelkie myśli o tym?

+0

Co dokładnie próbujesz zrobić? Powinieneś również oznaczyć to jako "Wix". – dvallejo

+1

Proszę również nie powtarzać znaczników ("C#") w tytule. Jestem pewien, że nie uważasz, że 'GetSubKeyNames' jest metodą C#, ale tytuł jest tak czytany. –

Odpowiedz

25

Problem dotyczy dysku 32/64 bitowego. Wygląda na to, że niektóre z instalacji wydarzyły się pod

HKEY_LOCAL_MACHINE\Software\Wow6432Node\... 

Po ich wyliczeniu otrzymuję wszystkie moje instalacje.

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