Dans .NET/C# test si le processus a des privilèges d'administrateur
Est-il une manière canonique de tester pour voir si le processus a des privilèges d'administrateur sur une machine?
Je vais commencer un long processus en cours d'exécution, et plus tard dans le processus de " durée de vie, il va tenter certaines choses qui nécessitent des privilèges d'administrateur.
J'aimerais pouvoir tester en avant si le processus a ces droits plutôt que plus tard.
Vous devez vous connecter pour publier un commentaire.
Il s'agira de vérifier si l'utilisateur est dans le groupe Administrateurs local (en supposant que vous n'êtes pas vérifier pour le domaine des autorisations d'administrateur)
principal.IsInRole(WindowsBuiltInRole.Administrator);
retournera false, il ne retourne vrai si vous êtes un administrateur avec élévation de privilèges.user
objet; ce n'est pas une bonne pratique pour se prévaloir de la GC pour nettoyer pour vous. Je dois également souligner que la capture deUnauthorizedAccessException
et ensuite de prendreException
de la même manière redondante, et vous ne devriez pas vraiment faire ce dernier.De départ avec Wadih M du code, j'ai quelques autres P/Invoke code de l'essayer et de gérer le cas lorsque l'UAC est activé.
http://www.davidmoore.info/blog/2011/06/20/how-to-check-if-the-current-user-is-an-administrator-even-if-uac-is-on/
D'abord, nous aurons besoin d'un peu de code à l'appui de la GetTokenInformation appel d'API:
Ensuite, le code pour détecter si l'utilisateur est un Administrateur (qui renvoie true si elles le sont, sinon false).
Si vous voulez vous assurer que votre solution fonctionne sous windows Vista, l'UAC, et ont .Net Framework 3.5 ou mieux, vous pouvez utiliser le Système.DirectoryServices.AccountManagement espace de noms. Votre code devrait ressembler à quelque chose comme:
Essayé Erwin code mais ça ne compile pas.
L'ai eu à travailler comme ça:
À l'aide de l' .NET Framework 4.5, il semble être plus facile de vérifier si un utilisateur est dans le groupe d'administrateurs:
D'autres réponses en tirant parti de la IsInRole méthode retourne true si l'utilisateur est en cours d'exécution avec un jeton élevé, comme d'autres l'ont commenté. Voici une alternative potentielle pour vérifier juste pour appartenance au groupe local Administrateurs à la fois une norme et une élévation de contexte:
Utiliser pouvez utiliser WMI avec quelque chose comme ça pour savoir si le compte est un compte administrateur, et à peu près tout ce que vous voulez savoir sur compte là
Pour le rendre plus facile pour commencer à télécharger WMI Créateur
vous pouvez également utiliser cet accès active directory (LDAP) ou toute autre fonction de votre ordinateur/réseau
La suite est testé pour fonctionner dans .NET Core 3 sur Windows 10 et Ubuntu Linux:
Il retourne
true
lorsque l'UAC est en effet (Windows) ou lorsque l'application s'exécute en tant que super-utilisateur sur Linux (par exemplesudo myapp
).Si quelqu'un a la possibilité de le tester sur MacOS, veuillez nous faire part de vos conclusions.
Ce sujet:
Il existe 4 Méthodes - que je préfère:
Voici le code pour vous donner une liste de toutes les demande de données pour votre courant de l'Identité de l'utilisateur.
REMARQUE: il y a une grande différence entre les allégations de la liste qui est retourné entre WindowsPrincipal.Actuel.Les revendications et les (nouveau WindowsPrincipal(WindowsIdentity.GetCurrent())).Les revendications
WindowsPrincipal
etnew WindowsPrincipal
et pourquoi.