Comment puis-je forcer mon application .NET à fonctionner en tant qu’administrateur?

Une fois mon programme installé sur un ordinateur client, comment puis-je forcer mon programme à fonctionner en tant qu’administrateur sous Windows 7?

Vous voudrez modifier le manifeste intégré au programme. Cela fonctionne sur Visual Studio 2008 et versions ultérieures: Projet + Ajouter un nouvel élément, sélectionnez “Fichier manifeste de l’application”. Modifiez l’élément pour:

   

L’utilisateur reçoit l’invite UAC au démarrage du programme. Utiliser à bon escient leur patience peut s’user rapidement.

Ajouter un élément requestedExecutionLevel à votre manifeste ne représente que la moitié de la bataille; Vous devez vous rappeler que l’ UAC peut être désactivé. Si c’est le cas, vous devez effectuer la vérification de l’ancienne méthode et mettre en place une boîte de dialog d’erreur si l’utilisateur n’est pas administrateur
(Appelez IsInRole(WindowsBuiltInRole.Administrator) sur le CurrentPrincipal votre thread).

J’ai implémenté du code pour le faire manuellement:

 using System.Security.Principal; public bool IsUserAdministrator() { bool isAdmin; try { WindowsIdentity user = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(user); isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator); } catch (UnauthorizedAccessException ex) { isAdmin = false; } catch (Exception ex) { isAdmin = false; } return isAdmin; } 

Vous pouvez incorporer un fichier manifeste dans le fichier EXE, ce qui entraînera toujours Windows (7 ou supérieur) à exécuter le programme en tant qu’administrateur.

Vous trouverez plus de détails à l’ étape 6: Création et intégration d’un manifeste d’application (UAC) (MSDN).

Les étapes détaillées sont les suivantes.

  1. Ajouter un fichier manifeste d’application à la solution
  2. Modifier le paramètre de l’application sur “app.manifest”
  3. Balise de mise à jour de “requestedExecutionLevel” à requireAdministrator.

Ajout de fichier dans la solution

Sélectionner un fichier manifeste d'application

Sélectionnez l'option manifeste

Mettre à jour le fichier manifeste

Notez qu’en utilisant ce code, vous devez désactiver les parameters de sécurité de ClickOnce, pour cela, accédez à Propriétés -> Sécurité -> Sécurité ClickOnce

Lorsque vous travaillez sur Visual Studio 2008, cliquez avec le bouton droit de la souris sur Project -> Add New Item , puis choisissez Application Manifest File .

Dans le fichier manifeste, vous trouverez la balise requestedExecutionLevel et vous pouvez définir le niveau sur trois valeurs:

OU

OU

Pour que votre application fonctionne en tant qu’administrateur, vous devez choisir celle du milieu.

Dans Visual Studio 2010, cliquez avec le bouton droit sur le nom de votre projet. Hit “Afficher les parameters Windows”, cela génère et ouvre un fichier appelé “app.manifest”. Dans ce fichier, remplacez “asInvoker” par “requireAdministrator”, comme expliqué dans les sections commentées du fichier.

Selon

  

vous voudrez append un manifeste d’application si vous n’en avez pas déjà un ou ne savez pas comment en append un. Comme certains projets n’ajoutent pas automatiquement un fichier manifeste distinct, accédez d’abord aux propriétés du projet, accédez à l’onglet Application et vérifiez que votre projet n’exclut pas le manifeste en bas du robinet.

  • Ensuite, faites un clic droit sur le projet
  • Ajoute un nouvel object
  • Enfin, recherchez et cliquez sur le fichier manifeste de l’application

Une autre façon de le faire, dans le code uniquement, consiste à détecter si le processus est exécuté comme admin, comme dans la réponse de @NG. . Et puis ouvrez à nouveau l’application et fermez celle en cours.

J’utilise ce code lorsqu’une application nécessite uniquement des privilèges d’administrateur lorsqu’elle est exécutée sous certaines conditions, par exemple lors de l’installation en tant que service. Donc, il n’a pas besoin de fonctionner en tant qu’administrateur tout le temps comme les autres réponses le forcent aussi.

Remarque dans le code ci-dessous NeedsToRunAsAdmin est une méthode qui détecte si, dans les conditions actuelles, les privilèges d’administration sont requirejs. Si cela retourne false le code ne sera pas élevé. C’est un avantage majeur de cette approche par rapport aux autres.

Bien que ce code présente les avantages indiqués ci-dessus, il doit être relancé en tant que nouveau processus qui n’est pas toujours ce que vous voulez.

 private static void Main(ssortingng[] args) { if (NeedsToRunAsAdmin() && !IsRunAsAdmin()) { ProcessStartInfo proc = new ProcessStartInfo(); proc.UseShellExecute = true; proc.WorkingDirectory = Environment.CurrentDirectory; proc.FileName = Assembly.GetEntryAssembly().CodeBase; foreach (ssortingng arg in args) { proc.Arguments += Ssortingng.Format("\"{0}\" ", arg); } proc.Verb = "runas"; try { Process.Start(proc); } catch { Console.WriteLine("This application requires elevated credentials in order to operate correctly!"); } } else { //Normal program logic... } } private static bool IsRunAsAdmin() { WindowsIdentity id = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(id); return principal.IsInRole(WindowsBuiltInRole.Administrator); } 

c’est la version simplifiée de cette réponse

 public bool IsUserAdministrator() { try { WindowsIdentity user = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(user); return principal.IsInRole(WindowsBuiltInRole.Administrator); } catch (Exception) { return false; } } 

Vous pouvez créer le manifeste à l’aide des parameters de sécurité ClickOnce, puis le désactiver:

 Right click on the Project -> Properties -> Security -> Enable ClickOnce Security Settings 

Une fois que vous avez cliqué dessus, un fichier sera créé sous le dossier de propriétés du projet appelé app.manifest. Une fois créé, vous pouvez décocher l’option Enable ClickOnce Security Settings

Ouvrez ce fichier et modifiez cette ligne:

  

à:

   

Cela fera en sorte que le programme nécessite des privilèges d’administrateur.

Faites un clic droit sur votre exécutable, allez dans Propriétés> Compatibilité et cochez la case “Exécuter ce programme en tant qu’administrateur”.

Si vous voulez l’exécuter en tant qu’administrateur pour tous les utilisateurs, faites la même chose dans «Modification des parameters pour tous les utilisateurs».