2010-11-29 6 views
2

J'ai une application C# que j'écris et qui va réparer les clés de registre endommagées dans toute l'organisation. J'essaie d'utiliser les trois classes de RegistryKey, RegistrySecurity et RegistryAccessRule et quand j'essaie de les utiliser, je reçois un "L'accès au registre demandé n'est pas autorisé.". J'ai cherché ceci intensivement et ne peux pas trouver une bonne solution.Utilisation de RegistryKey, RegistrySecurity et RegistryAccessRule pour réparer les paramètres de registre défectueux sous Windows XP

La clé que j'essaye de réparer, n'ai aucune autorisation sur eux (voir la capture d'écran ci-dessous). Ils sont vides et n'ont aucun paramètre héritable. Cela ne me permet pas de les corriger avec mon application car je n'ai pas d'autorisations, mais je peux changer les permissions avec l'utilisateur que je lance cette application comme si j'ouvrais regedit. Donc, je sais que je peux ajouter des permissions à des machines cassées par des moyens manuels avec cet utilisateur, mais pour une raison quelconque, mon application, peu importe combien je lui dis de s'élever ne peut pas obtenir les autorisations.

choses que j'ai essayé:

  1. Sur Windows 7 cela fonctionne lorsque vous exécutez l'application avec contrôle de compte, cliquez sur Exécuter en tant qu'administrateur droit. Je voudrais dupliquer pouvoir faire ceci sur Windows XP avec le même code.
  2. J'ai créé un manifeste en utilisant le niveau "HighestAvailable" et en essayant "requireAdministrator".
  3. J'ai également essayé d'utiliser "System.Security.Permissions.RegistryPermission" assert qui apparemment apportera plus haut niveau d'autorisations pour fonctionner aussi.
  4. Je ne suis pas en cours d'exécution à partir d'un partage réseau, bien que j'ai essayé à la fois local et réseau pour voir quelle zone de sécurité il fonctionnerait à partir de questions.

Vous pouvez voir ce que les autorisations ressemblent ci-dessous: http://i.stack.imgur.com/0c99s.jpg

Toute aide est appréciée!

Répondre

0

Vous pouvez essayer usurper l'identité d'un compte administrateur à partir de votre code, en utilisant P/Invoke pour appeler les années api nécessaires comme cette personne a fait pour créer une classe compte d'emprunt d'identité:

Impersonator Class c#

Questions connexes