2010-06-24 6 views
20

Nous utilisons WIX pour installer un certain nombre de services que nous créons. J'écris un utilitaire rapide pour vider les services actuellement installés. Je viens de itérer sur les sous-clés:Registre GetSubKeyNames() répertorie différentes clés que Regedit?

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 

recherche d'DisplayName. Le problème est, seulement deux de mes dix services apparaissent dans la liste.

Cependant, quand je regarde les sous-clés dans Regedit, ils sont là. De plus, ils sont dans les programmes installés (et je peux les trouver dans SELECT * de Win32_Product aussi). J'ai regardé les documents MSDN, essayant de trouver s'il y a une vue spéciale du registre qui me manque. Peut-être que c'est un problème de privilège? Mais je cours l'outil en tant qu'administrateur. Y at-il un problème de montage de la ruche?

Juste pour être clair avec le code, voici le code d'application de test (de 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")); 
} 

Toute réflexion sur ce sujet?

+0

Qu'essayez-vous exactement de faire? Aussi, vous devriez marquer ceci comme "Wix". – dvallejo

+1

Veuillez également ne pas répéter les balises ("C#") dans le titre. Je suis sûr que vous ne pensez pas que 'GetSubKeyNames' est une méthode C#, mais le titre est lu de cette façon. –

Répondre

25

Le problème est un problème 32/64 bits. Il semble que certaines des installations est passé sous

HKEY_LOCAL_MACHINE\Software\Wow6432Node\... 

Quand je les énumérer tous les deux, je reçois toutes mes installations.

Apparemment, je peux aussi utiliser RegistryKey.OpenBaseKey() avec un RegistryView.Registry64/32 au lieu du Wow6432Node aussi.