it-swarm-es.com

¿Cómo solicitar permisos de administrador cuando se inicia el programa?

Necesito que mi software pueda ejecutarse como administrador en Windows Vista (si alguien lo ejecuta sin permisos administrativos, se bloqueará).

Al iniciar otro software, he visto un aviso del sistema como "este software se ejecutará como administrador. ¿Desea continuar?" Cuando la aplicación estaba tratando de adquirir privilegios administrativos.

¿Cómo solicito privilegios administrativos cuando ejecuto una aplicación c # en Windows Vista?

69
Arsen Zahray

Agregue lo siguiente a su archivo de manifiesto:

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

También puedes usar highestAvailable para el nivel.

Mira aquí acerca de la incrustación de archivos de manifiesto:

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

PD: Si no tiene un archivo de manifiesto, puede agregar fácilmente uno nuevo:

En Visual Studio, haga clic con el botón derecho en proyecto -> Agregar elemento -> Elegir archivo de manifiesto de aplicación (en General para los elementos de Visual C #)

El archivo agregado ya tendrá la parte anterior, solo cambia el nivel a requireAdministrator desde asInvoker

122
manojlds

Coloque este XML en un archivo llamado 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
1
Polynomial

Para F # Visual Studio 2013, incluido un archivo de manifiesto que solicita la elevación del administrador mediante el indicador /win32manifest del compilador FSharp, de la siguiente manera me funcionó. Entonces, dada una salida del proyecto llamada "App.Exe"

  1. Cree un archivo con el siguiente contenido (para su comodidad, puede agregar el archivo al proyecto. Asegúrese de que Build Action es None' andCopia en la Salida ...isNo copie. By convention such a file is named App.Exe.manifest`. Si necesita uiAccess (Interfaz de usuario), El montaje debe tener un nombre fuerte.

    <?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. Edite el campo de entrada del Other flags: del panel de compilación del diálogo del proyecto para incluir lo siguiente: /win32manifest:<ApplicationManifestFile>. Por ejemplo, en este caso, /win32manifest:App.Exe.manifest.

0
George