web-dev-qa-db-fra.com

Comment demander des autorisations d'administrateur au démarrage du programme?

J'ai besoin que mon logiciel puisse fonctionner en tant qu'administrateur sous Windows Vista (si quelqu'un l'exécute sans autorisations administratives, il se bloque).

Lors du lancement d'un autre logiciel, j'ai vu une invite du système telle que "ce logiciel sera exécuté en tant qu'administrateur. Voulez-vous continuer?" lorsque l'application tentait d'acquérir des privilèges administratifs.

Comment demander des privilèges administratifs lors de l'exécution d'une application c # sous Windows Vista?

70
Arsen Zahray

Ajoutez les éléments suivants à votre fichier manifeste:

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

Vous pouvez également utiliser highestAvailable pour le niveau.

Regardez ici pour incorporer des fichiers manifeste:

http://msdn.Microsoft.com/en-us/library/bb756929.aspx

PS: Si vous n'avez pas de fichier manifeste, vous pouvez facilement en ajouter un nouveau:

Dans Visual Studio, cliquez avec le bouton droit sur projet -> Ajouter un élément -> Choisir le fichier manifeste de l'application (sous Général pour les éléments Visual C #).

Le fichier ajouté aura déjà la partie ci-dessus, il suffit de changer le niveau en requireAdministrator à partir de asInvoker

123
manojlds

Placez ce fichier XML dans un fichier nommé yourexename.exe.manifest:

<Assembly xmlns="urn:schemas-Microsoft-com:asm.v1" manifestVersion="1.0>
<trustInfo xmlns="urn:schemas-Microsoft-com:asm.v3">
   <security>
     <requestedPrivileges>
        <requestedExecutionLevel level="highestAvailable" />
     </requestedPrivileges>
   </security>
</trustInfo>
</Assembly>
12
Steve Danner

Vous devez utiliser le jeton requestedExecutionLevel dans un manifeste:

http://www.developerfusion.com/code/7987/making-a-net-app-run-on-Vista-with-administrator-priviledges/

1
Polynomial

Pour F # Visual Studio 2013, y compris un fichier manifeste qui demande l'élévation d'administrateur à l'aide du compilateur FSharp /win32manifest Le drapeau suivant a fonctionné pour moi. Donc, étant donné une sortie de projet nommée "App.Exe"

  1. Créez un fichier avec le contenu suivant (pour plus de commodité, vous pouvez ajouter le fichier au projet. Assurez-vous que c'est Build Action est None' andCopier dans la sortie ...isNe pas copier. By convention such a file is named App.Exe.manifest`. Si vous avez besoin de uiAccess (interface utilisateur), l’assemblage doit avoir un nom fort.

    <?xml version="1.0" encoding="utf-8" ?>
    <asmv1:Assembly manifestVersion="1.0" 
        xmlns="urn:schemas-Microsoft-com:asm.v1"
        xmlns:asmv1="urn:schemas-Microsoft-com:asm.v1"
        xmlns:asmv2="urn:schemas-Microsoft-com:asm.v2"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <assemblyIdentity version="1.0.0.0" name="App" />
      <trustInfo xmlns="urn:schemas-Microsoft-com:asm.v2">
        <security>
          <requestedPrivileges xmlns="urn:schemas-Microsoft-com:asm.v3">
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
          </requestedPrivileges>
        </security>
      </trustInfo>
    </asmv1:Assembly>
    
  2. Editez le panneau de construction du dialogue de projet Other flags: Le champ d’entrée comprend les éléments suivants: /win32manifest:<ApplicationManifestFile>. Par exemple, dans ce cas, /win32manifest:App.Exe.manifest.

0
George