109 votes

Vérifiez si l'utilisateur actuel est administrateur

Mon application a besoin d'exécuter quelques scripts, et je dois m'assurer que l'utilisateur qui les exécute est un administrateur... Quel est le meilleur moyen de le faire en utilisant C# ?

2voto

Greg Points 3175

Je pensais juste ajouter une autre solution; car la IsInRole ne fonctionne pas toujours.

  • Si l'utilisateur n'est pas membre du groupe d'utilisateurs Windows spécifié dans la session en cours.
  • L'administrateur a apporté des modifications dans les paramètres de la stratégie de groupe
  • Le paramètre de rôle est traité comme une méthode 'sensible à la casse'.
  • Et si une machine XP n'a pas installé la Version du Framework .NET, cela ne fonctionnera pas.

En fonction de vos besoins si vous devez prendre en charge des systèmes plus anciens; ou si vous n'êtes pas sûr de la façon dont votre client gère physiquement votre système. C'est une solution que j'ai implémentée; pour la flexibilité et les modifications.

class Elevated_Rights
    {

        // Booléen de jeton :
        private bool _level = false;

        #region Constructeur :

        protected Elevated_Rights()
        {

            // Appeler la méthode lors de la création :
            Elevate();

        }

        #endregion

        public void Elevate()
        {

            // Obtenir l'identité :
            WindowsIdentity user = WindowsIdentity.GetCurrent();

            // Définir le rôle
            WindowsPrincipal role = new WindowsPrincipal(user);

            #region Tester le système d'exploitation pour UAC :

            if (Environment.OSVersion.Platform != PlatformID.Win32NT || Environment.OSVersion.Version.Major < 6)
            {

                // False :
                _level = false;

                // À faire : Exception/ journal d'exception

            }

            #endregion

            else
            {

                #region Tester l'identité non nulle :

                if (user == null)
                {

                    // False :
                    _level = false;

                    // À faire : "Journal d'exception / Exception"

                }

                #endregion

                else
                {

                    #region Assurer le rôle de sécurité :

                    if (!(role.IsInRole(WindowsBuiltInRole.Administrator)))
                    {

                        // False :
                        _level = false;

                        // À faire : "Journal d'exception / Exception"

                    }

                    else
                    {

                        // True :
                        _level = true;

                    }

                    #endregion

                } // Fermer le else imbriqué

            } // Fermer le else initial

        } // Fin de la classe.

Donc, le code ci-dessus a quelques constructions; il va réellement tester pour voir si l'utilisateur est sur Vista ou une version ultérieure. De cette manière, si un client est sur XP sans framework ou avec un ancien framework beta, cela vous permettra de modifier ce que vous souhaitez faire.

Ensuite, il va physiquement tester pour éviter une valeur nulle pour le compte.

Enfin, il fournira la vérification pour vérifier que l'utilisateur est effectivement dans le rôle approprié.

Je sais que la question a déjà été répondue; mais j'ai pensé que ma solution serait un excellent ajout à la page pour toute autre personne recherchant sur Stack. Ma raison derrière le Constructeur Protégé vous permettrait d'utiliser cette classe comme une classe dérivée que vous pourriez contrôler l'état lorsque la classe est instanciée.

0 votes

0voto

Qwertiy Points 6707

Je dois être sûr que l'utilisateur exécutant les fonctions est un administrateur

Si votre application doit être exécutée avec des droits d'administrateur, il serait bon de mettre à jour son manifeste.
Définissez requestedExecutionlevel sur requireAdminstrator.

0voto

Alper Ebicoglu Points 2977

C'est ainsi que je finis par... Je force mon application à s'exécuter en mode administrateur. Pour ce faire

1- Ajoutez app.manifest à votre fichier csproj.

MyProject.csproj

    Exe
    netcoreapp3.1
    app.manifest

2- Ajoutez le fichier app.manifest ci-dessous à votre projet.

app.manifest

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X