Comment forcer my.NET application to run as administrator?

une fois que mon programme est installé sur une machine client, Comment puis-je forcer mon programme à fonctionner en tant qu'administrateur sur Windows 7?

739
demandé sur Daniel B 2010-05-12 15:09:50
la source

12 ответов

Vous voudrez modifier le manifeste qui sera intégrée dans le programme. Cela fonctionne sur Visual Studio 2008 et plus: Projet + Ajouter un nouvel élément, sélectionnez "Application Manifest File". Remplacer l'élément <requestedExecutionLevel> par:

 <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

l'utilisateur reçoit l'invite UAC lorsqu'il démarre le programme. Utilisez sagement; leur patience peut s'épuiser rapidement.

972
répondu Hans Passant 2017-07-18 17:23:32
la source

Ajouter un élément requestedExecutionLevel à votre manifeste n'est que la moitié de la bataille; vous devez vous rappeler que UAC peut être éteint. Si c'est le cas, vous devez effectuer la vérification à l'ancienne et mettre en place une boîte de dialogue d'erreur si l'utilisateur n'est pas administrateur

(appeler IsInRole(WindowsBuiltInRole.Administrator) sur votre thread CurrentPrincipal ).

133
répondu Anders 2017-05-30 17:51:04
la source

j'ai implémenté un 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;
}
48
répondu NG. 2016-04-05 19:30:58
la source

vous pouvez intégrer un fichier manifest dans le fichier EXE, ce qui fera que Windows (7 ou plus) exécutera toujours le programme en tant qu'administrateur.

vous pouvez trouver plus de détails dans Étape 6: Créer et intégrer un manifeste D'Application (UAC) (MSDN).

39
répondu David 2016-04-05 19:30:14
la source

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

  1. Ajouter un fichier de manifeste d'application de la solution
  2. Modifier les paramètre d'application à "app.manifeste 151940920"
  3. mettre à Jour l'étiquette de "requestedExecutionLevel" à requireAdministrator.

Adding file in Solution

Select Application Manifest File

Select Manifest option

Update Manifest file

notez qu'en utilisant ce code vous devez désactiver les paramètres de sécurité de ClickOnce, pour ce faire, allez dans Propriétés - > Sécurité - > Sécurité ClickOnce

35
répondu Hassan Rahman 2018-02-15 15:06:09
la source

pendant que vous travaillez sur Visual Studio 2008, faites un clic droit sur Project -> Add New Item et choisissez Application Manifest File .

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

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

ou

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

ou

<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

pour définir votre application à exécuter en tant qu'administrateur, vous avez choisi de celui du milieu.

14
répondu Rashad Maqsood 2016-04-05 19:32:13
la source

dans Visual Studio 2010 faites un clic droit sur le nom de votre projet. Cliquez sur "Afficher les paramètres de Windows", ce qui génère et ouvre un fichier appelé " app.manifester." Dans ce fichier, remplacer "asInvoker" par "requireAdministrator" comme expliqué dans les sections commentées du fichier.

10
répondu Evolved 2011-09-07 19:19:27
la source

selon

<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

vous voudrez ajouter un manifeste d'application si vous n'en avez pas déjà un ou si vous ne savez pas comment en ajouter un. Comme certains projets n'ajoutent pas automatiquement un fichier de manifeste séparé, allez d'abord à Propriétés du projet, naviguez vers l'onglet Application et vérifiez pour vous assurer que votre projet n'exclut pas le manifeste au bas du robinet.

  • Ensuite, cliquez-droit sur le projet
  • Ajouter un nouvel article
  • dernière, trouvez et cliquez sur application Manifest File
10
répondu Justin Mcconnell 2016-04-05 19:34:12
la source

une autre façon de le faire, en code seulement, est de détecter si le processus est exécuté en tant qu'administrateur comme dans la réponse par @NG. . Puis ouvrez à nouveau l'application et fermez l'actuelle.

j'utilise ce code lorsqu'une application n'a besoin de privilèges admin que lorsqu'elle est exécutée dans certaines conditions, comme 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.

Note dans le code ci-dessous NeedsToRunAsAdmin est une méthode qui détecte si dans les conditions actuelles les privilèges admin sont nécessaires. Si cela retourne false le code ne s'élèvera pas lui-même. Ceci est un avantage majeur de cette approche sur les autres.

bien que ce code ait les avantages mentionnés ci-dessus, il a besoin de se relancer comme un nouveau processus qui n'est pas toujours ce que vous voulez.

private static void Main(string[] args)
{
    if (NeedsToRunAsAdmin() && !IsRunAsAdmin())
    {
        ProcessStartInfo proc = new ProcessStartInfo();
        proc.UseShellExecute = true;
        proc.WorkingDirectory = Environment.CurrentDirectory;
        proc.FileName = Assembly.GetEntryAssembly().CodeBase;

        foreach (string arg in args)
        {
            proc.Arguments += String.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);
}
5
répondu TheLethalCoder 2017-05-23 15:10:48
la source

c'est la version simplifiée de ce réponse

public bool IsUserAdministrator()
{
    try
    {
        WindowsIdentity user = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(user);
        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch (Exception)
    {
        return false;
    }
}
3
répondu Hakam Fostok 2018-05-05 10:42:52
la source

vous pouvez créer le manifeste en utilisant les paramètres de sécurité ClickOnce, puis le désactiver:

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

après que vous l'avez cliqué, un fichier sera créé sous le dossier des propriétés du projet appelé app.manifeste une fois que cela est créé, vous pouvez décocher l'option Enable ClickOnce Security Settings 151950920"

ouvrir ce fichier et changer cette ligne:

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

à:

 <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

ce sera le programme nécessite des privilèges d'administrateur.

2
répondu Yochai Timmer 2018-02-14 13:19:01
la source

faites un clic droit sur votre exécutable, allez à Propriétés > compatibilité et cochez la case "Exécuter ce programme en tant qu'administrateur".

Si vous voulez exécuter en tant qu'administrateur pour tous les utilisateurs, faire la même chose dans "modifier les paramètres pour tous les utilisateurs".

-2
répondu SlickJayD 2014-03-27 23:03:29
la source