2010-08-07 79 views
1

Il semble que l'élévation des privilèges est une chose commune que la plupart des développeurs se battent avec la plupart du temps ils ne l'ont tout simplement pas. Pour ma part, je me bats avec une routine massive de travail en arrière-plan et j'essaie de garder mon code local à la classe qui va l'employer. Compte tenu de la quantité de code et fait référence à mon travailleur de fond fait une fois qu'il se termine à l'intérieur de la méthode du gestionnaire « RunWorkerCompleted » sa preuve diffcile d'accepter cela comme une alternative viable:Comment emprunter l'identité d'un rôle administrateur Windows intégré pour une application WinForms C#?

HOMEWORK 1:

HOMEWORK 2:

HOMEWORK 3:

Il y a simplement trop de dépendance à mon formulaire principal classer par mon travailleur de fond pour moi d'envisager d'expédier la solution entière dans un processus séparé avec privs 'Admin'. Cela implique beaucoup trop de hacher et de changer.

Omega Coder:

Après avoir lu dans CAS pour l'examen 70-536, je suis au courant de la plupart des termes dans cet exemple ci-dessus, mais je ne voyais pas comment et pourquoi il fonctionne? Quelqu'un pourrait-il expliquer pourquoi la permission est accordée à la méthode 'ManagersOnly'? Comme une fois que le PrincipalPolicy est changé en WindowsPrincipal, les deux prochaines étapes ressemblent à des déclarations d'instanciation d'objets ordinaires posé à quelque chose comme:

System.AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal, IPrincipal, IIdentity); 

De toute évidence, une telle surcharge existe, mais il est très clair dans ce que la surcharge fait.

Question 1: Comment l'exemple d'OmegaCoders obtient-il cet effet? Parce que cela fonctionne correctement car mon utilisateur fait partie du groupe 'BUILTIN \ Administrateurs'. Je suis à la recherche d'une réponse basée sur la littérature, alors allez-y autant de détails que vous ressentez.

MISE À JOUR 1:

Question 2: Comment pourrais-je revenir le PrincipalPolicy à ce qu'elle était avant ... une fois que la méthode retourne je ne pas besoin de PrincipalPolicy encore être mis à ' WindowsPrincipal '??? Donc, cette application peut continuer à fonctionner comme un utilisateur privilégié inférieur comme je l'ai prévu.

Question 3: Une fois que la méthode 'ManagersOnly' est revenue, l'autorisation est-elle annulée? Est-il limité à la vie de la Méthode?

System.AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.NoPrincipal); 

* MISE À JOUR 2: *

Cela se révèle difficile, comme sur ma machine Pro dev Win7 je peux tester et exécuter quoi que ce soit, mais quand j'ai essayé de tester certains code sur un simple ordinateur portable Win7 Accueil J'ai découvert que les autorisations étaient refusées. Ce qui soulève les questions qui changent la PrincipalPolicy en 'WindowsPrincipal' ne fonctionne pas pour tous les utilisateurs de Vista et Win7, car beaucoup ne font même pas partie du groupe d'utilisateurs admin. Donc, cette option est inutile ... Assis sur ce petit ordinateur portable, il devient évident que ce n'est pas la solution dont j'ai besoin.

IGNORE PRECEDENT Qs - avec mon propre recherche, j'ai fait, ils ne sont pas réalisables.

Question 4: comment va-t-on se faire passer pour un administrateur par programmation et temporarilly dans le code?

Répondre

1

La réponse courte est NON. Il semble qu'après tout ce que je faisais, il ne semble pas y avoir de façon progressiste d'élever les permissions d'une méthode, car CAS complète RBS, donc si l'utilisateur ne fait pas partie du bon groupe. Ensuite, il n'y a aucun intérêt à accéder aux droits d'administrateur car rbs indique à cas que l'utilisateur ne fait pas partie du groupe, donc la requête est rejetée et l'autorisation est refusée. Résultant d'une exception. Si l'utilisateur fait partie du groupe dont vous avez besoin, par exemple Administrateurs, la modification de Domaines PrincipalPolicy vous donnera une solution temporaire mais ne s'adresse pas aux utilisateurs qui ne font tout simplement pas partie des groupes d'administrateurs. C'est là que la solution ci-dessus tombe en morceaux. La réponse longue est, expédier le code sujette à un problème dans un petit fichier .exe séparé et exécutez-le séparément.