web-dev-qa-db-fra.com

Droits d'administrateur pour une seule méthode

Est-il possible d'exiger des droits d'administrateur pour une seule méthode?

Quelque chose comme ça:

[RequireAdminRightsForThisMethod()]

private void TheMethod(){

    // Do something

}
63
lluismontero

Vous pouvez ajouter un attribut PrincipalPermission à votre méthode pour demander des privilèges administratifs pour son exécution:

[PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Administrators")]
public void MyMethod()
{
}

Ceci est décrit plus en détail dans l'article suivant:

Principes de sécurité et droits d'administrateur local dans C # .Net

Si vous cherchez un moyen d'élever un processus déjà existant, je doute que cela soit possible car les privilèges d'administrateur sont accordés au niveau du processus à un processus au démarrage (voir ce lien question ). Vous devez exécuter votre application "en tant qu'administrateur" pour obtenir le comportement souhaité.

Cependant, il existe certaines astuces qui pourraient vous permettre de faire ce que vous voulez, mais sachez que cela peut entraîner de graves risques pour la sécurité. Voir le fil suivant dans les forums MSDN:

Lancement du serveur MyElevatedCom sans demander les informations d'identification de l'administrateur de l'utilisateur standard

Mise à jour (à partir du commentaire)

Il semble que si une mise à jour nécessite une élévation, la mise à jour de votre application est mieux effectuée par un processus distinct (soit un autre exécutable, soit votre application appelée avec un commutateur de ligne de commande). Pour ce processus distinct, vous pouvez demander l'élévation comme suit:

var psi = new ProcessStartInfo();
psi.FileName = "path to update.exe";
psi.Arguments = "arguments for update.exe";
psi.Verb = "runas";

var process = new Process();
process.StartInfo = psi;
process.Start();   
process.WaitForExit();
83
Dirk Vollmar

Une méthode peut nécessiter des privilèges administratifs pour s'exécuter, mais il n'est pas possible de passer automatiquement à Admin lors de l'exécution d'une méthode.

15
SLaks