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

81

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 mensaje del sistema como "este software se ejecutará como administrador. ¿Desea continuar?" cuando la aplicación intentaba adquirir privilegios administrativos.

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

Arsen Zahray
fuente
6
No olvide que hacer esto solo oculta el problema subyacente, no lo soluciona. Incluso si su programa realmente necesita permisos de administrador, no debería fallar si no los obtiene. La causa más probable es que no verifique una condición de error después de una llamada al sistema.
Harry Johnston

Respuestas:

143

Agrega lo siguiente a tu archivo de manifiesto:

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

También puede utilizar highestAvailablepara el nivel.

Mire aquí sobre cómo incrustar 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 el proyecto -> Agregar elemento -> Elegir archivo de manifiesto de aplicación (en General para elementos de Visual C #)

El archivo agregado ya tendrá la parte anterior, simplemente cambie el nivel requireAdministratordeasInvoker

manojlds
fuente
2
Vale la pena mencionar que si agrega un archivo de manifiesto de aplicación en VS de esta manera, obtiene una plantilla con muchas otras opciones (como decir que su aplicación solo funciona en Windows 10 y versiones posteriores). Probado en VS2017.
Per Lundberg
@PerLundberg - No vale la pena mencionarlo, porque el Ask-er original no preguntó sobre esto - Preguntó sobre los permisos de administrador
Momoro
3
Las preguntas de @Momoro sobre SO no son solo para el OP, son para el mayor beneficio de la comunidad. Otras personas pueden encontrar esta pregunta al buscar otras soluciones, no solo exactamente lo que preguntó el OP. Y, en general, no está de más enseñar a la gente sobre "puedes hacer estas cosas con los manifiestos de aplicación".
Per Lundberg
No estaba insinuando nada grosero (Lo siento si me encontré de esa manera) Solo estaba leyendo sobre respuestas / preguntas antiguas y me confundí un poco: D
Momoro
14

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>
Steve Danner
fuente
-1

Para F # Visual Studio 2013, incluir un archivo de manifiesto que solicita la elevación del administrador utilizando el indicador del compilador FSharp de la /win32manifestsiguiente manera funcionó para mí. Entonces, dado un resultado del proyecto llamado "App.Exe"

  1. Cree un archivo con el siguiente contenido (para su comodidad, puede agregar el archivo al proyecto. Asegúrese de que Build Actionsea None' andCopiar a salida ... isNo copie . By convention such a file is named App.Exe.manifest`. Si necesita uiAccess (interfaz de usuario), el ensamblaje 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. Editar del panel de construcción diálogo proyecto de Other flags:campo de entrada para incluir lo siguiente: /win32manifest:<ApplicationManifestFile>. Por ejemplo, en este caso /win32manifest:App.Exe.manifest,.

George
fuente