2010-10-05 19 views
2

Cela ne peut pas être vrai, mais ça m'arrive. J'ai la fonction suivante:RegistryKey.GetSubKeyNames renvoie les noms qui ne figurent pas dans cette sous-clé!

private static bool KeyExists(RegistryKey key, string search) 
{ 
    //GetSubKeyNames is busted... 
    foreach (string subKey in key.GetSubKeyNames()) 
    { 
     if (subKey.Trim().Equals(search.Trim())) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

Si je mets la ligne String[] names = key.GetSubKeyNames() et un coup d'oeil dans le débogueur, je vois que les noms mentionnés ne sont pas ce que je vois dans regedit. Par exemple j'ai un morceau de logiciel installé qui apparaît dans la sous-clé Wow6432Node mais il apparaît si je le recherche dans la sous-clé normale du logiciel. Des idées?

Merci, brian

+1

Vous pourriez vouloir lire sur la réflexion de registre de Windows: http://msdn.microsoft.com/en-us/library/aa384235(VS.85).aspx –

Répondre

9

La clé contient Wow6432 les clés de Registre qu'un programme 32 bits voit. Projet + Propriétés, onglet Construire, vérifiez votre paramètre de cible de plate-forme. Il est par défaut à x86 dans VS2010.

La redirection de registre peut être modifiée mais pas avec la classe .NET RegistryKey. Vous devriez pinvoke les fonctions d'API de registre. Plus d'informations sur l'historique est disponible in the SDK.

+0

Je vois. Donc, dans mon code, j'ai essentiellement un interrupteur pour vérifier ce que je cherche dans les logiciels et dans le logiciel wow3264. Je devrais probablement omettre le commutateur et permettre au cadre de faire ce qu'il veut sans vérifier explicitement le noeud wow 3264? –

+0

Vous n'avez pas décrit pourquoi cela compte. Ça ne devrait pas. –

+0

Je vérifie la présence de certains logiciels potentiellement installés. J'ai hérité de ce code de certains développeurs précédents, donc ils auraient pu être complètement hors sujet, mais l'idée est que si je ne trouve pas le logiciel dans la sous-clé normale, je vérifie la sous-clé wow juste pour être certain. Mon application est compilée pour x86 mais sera installée sur l'une ou l'autre plate-forme. –