2011-08-22 3 views
0

Je suis en train de créer un explorateur de registre, principalement parce que je veux supporter de bien meilleures opérations de recherche. Comme "trouver tout" et expressions régulières. Un problème auquel je suis confronté est que certaines clés lancent une exception de sécurité lors de l'ouverture. J'ai essayé l'exécution de l'application avec des privilèges d'administrateur, mon compte d'utilisateur est également un administrateur. J'ai inclus un manifeste avec des privilèges demandés "requireAdministrator". J'ai également essayé de placer les paramètres de sécurité de ClickOnce à l'approbation pleine, qui est incompatible avec requireAdministrator, ou ainsi que Visual Studio me dit ... Rien ne semble aider à éviter cette exception.Problème d'exception d'accès au registre

Je voudrais juste parcourir toutes les touches. Je ne souhaite pas ajouter/supprimer des clés. Si un utilisateur souhaite supprimer une clé et n'a pas l'autorisation de le faire, il affichera un message d'erreur. Je veux juste pouvoir avoir un accès READ illimité. Est-ce possible? FTR: Je suis sur Win7 x64 et utilise Vs2010u et le projet est écrit en C# sur .net 4.0. Si regedit est capable de lire toutes les clés même si cela ne vous permet pas d'en éditer certaines. Il semblerait approprié que nous aussi pouvons faire une application pour faire la même chose. Bien que je le trouve très difficile, et il ne semble pas y avoir une aide réelle sur le www. Seuls les cercles de lien-lien, yay.

[EDIT]

Voici le code qui lit les clés:

private void IterateSubKeys(RegistryKeyModel key) { 

     var subKeys = key.Key.GetSubKeyNames(); 
     var values = key.Key.GetValueNames(); 

     foreach (var valuename in values) { 
      try { 
       var valueKind = key.Key.GetValueKind(valuename); 
       var value = key.Key.GetValue(valuename); 

       key.Values.Add(new RegistryValueModel(valuename, value, valueKind)); 
      } 
      catch { } 
     } 

     foreach (var keyname in subKeys) { 
      try { 
       var subkey = key.Key.OpenSubKey(
        keyname, 
        RegistryKeyPermissionCheck.ReadSubTree, 
        RegistryRights.ReadKey); 

       key.SubKeys.Add(new RegistryKeyModel(subkey)); 
      } 
      catch { Console.WriteLine("Error reading key: {0}", keyname); } 
     } 
    } 
+0

Pouvez-vous confirmer que regedit peut voir une clé que votre programme ne peut pas? Parce qu'il y a des clés que même Regedit ne peut pas voir (mais peut-être que votre programme énumère)? –

Répondre

2

C'est par la conception. De nombreuses clés liées à la sécurité peuvent uniquement être accessibles au compte système. Vous ne pouvez pas utiliser ce compte. Regedit ne peut pas non plus lire ces touches, elles ne sont tout simplement pas visibles. Éviter l'exception coûteuse va exiger pinvoke.

Questions connexes