Pregunta

Mi instalador implementa una configuración EXE que se utiliza para hacer una configuración básica en un servicio de Windows que también está instalado. El EXE también necesita crear y escribir algunas claves de registro. En un entorno de Windows Server 2008, estas claves no se pueden crear. He investigado y descubrí que este es un privilegio de administrador, y el EXE no solicita los permisos de administración que se necesitan bajo UAC en 2008. Puedo trabajar con esto haciendo clic derecho en EXE y en ejecución como administrador. Sin embargo, esto no es ideal, ya que es un paso adicional que necesito notificar a nuestros clientes que funcionen. ¿Hay alguna otra forma de elevar los permisos de administración al ejecutar el EXE?

¿Fue útil?

Solución

Pon un manifiesto en o con el exe. Puedo decirle cómo incrustar el manifiesto usando Visual Studio si me hace saber qué versión está utilizando. Si no está usando Visual Studio, o no construye el EXE, entonces puede poner el archivo de manifiesto en la misma carpeta que EXE y eso también funcionará. En ese caso, el archivo debe nombrarse igual que su exe, con .Manifest al final, por ejemplo, para foo.exe es foo.exe.Manifest. El contenido debería verse así:

<?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="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
            If you want to change the Windows User Account Control level replace the 
            requestedExecutionLevel node with one of the following.

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

            If you want to utilize File and Registry Virtualization for backward 
            compatibility then delete the requestedExecutionLevel node.
        -->
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

Observe que los valores posibles para SolicedExecutionLevel están aquí en un comentario, y este usa RequastEdMinistrator. Ahora siempre se elevará y, por lo tanto, funcionará para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top