2011-01-21 35 views
15

¿Alguien podría tener un ejemplo de un archivo de manifiesto para Delphi 7 que permita que las aplicaciones se ejecuten como administrador en Windows XP/Vista/7?Delphi 7 vista/windows 7 manifiesto

La ejecución de una aplicación con esta característica generalmente conduce a un cuadro de diálogo User Account Control (UAC) que solicita permisos privilegiados.

+4

El uso de 'highestAvailable', como lo sugieren Cosmin y Sigurdur, da como resultado que el programa se inicie sin derechos de administrador si el usuario no es un administrador. Si su aplicación solo puede hacer un trabajo útil si se ejecuta con derechos de administrador, entonces debe usar 'requireAdministrator' en su lugar. En el caso de que el usuario sea administrador, se mostrará el cuadro de diálogo de elevación de aprobación de UAC. En el caso de que el usuario sea un usuario estándar, se mostrará el cuadro de diálogo de elevación "sobre el hombro" de UAC. –

+0

Además, menciona XP pero no creo que pueda manifestar problemas de derechos de administrador. En XP, si quieres que un usuario estándar ejecute una aplicación como administrador, entonces creo que debes usar 'RunAs'. –

+0

Puede encontrar una solución automática en ** [this] (http://www.delphifeeds.com/go/f/80334?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:%20delphifeeds%20%28DelphiFeeds.com%29) * * artículo. – avra

Respuesta

2

Esto funciona muy bien para mí:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <dependency> 
    <dependentAssembly> 
     <assemblyIdentity 
      type="win32" 
      name="Microsoft.Windows.Common-Controls" 
      version="6.0.0.0" 
      publicKeyToken="6595b64144ccf1df" 
      language="*" 
      processorArchitecture="x86" 
     /> 
    </dependentAssembly> 
    </dependency> 

    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <security> 
     <requestedPrivileges> 
     <requestedExecutionLevel level="highestAvailable" /> 
     </requestedPrivileges> 
    </security> 

</assembly> 
6

Éstos son algunos enlaces informativos

Vista UI mainfest

Delphi and Windows Vista User Account Control

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <dependency> 
    <dependentAssembly> 
     <assemblyIdentity 
     type="win32" 
     name="Microsoft.Windows.Common-Controls" 
     version="6.0.0.0" 
     publicKeyToken="6595b64144ccf1df" 
     language="*" 
     processorArchitecture="x86" /> 
    </dependentAssembly> 
    </dependency> 

    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges> 
     <requestedExecutionLevel 
      level="highestAvailable"/> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</assembly> 
+0

Lo incluye agregando un archivo rc con 1 24 "ExecutionLevelHighestAvailable.manifest" – Sigurdur

+0

Simplemente recuerde eliminar el uso de 'XPMan' de todas las unidades del proyecto. – Isaac

+0

Además, cambie la arquitectura del procesador "x86" a "*" para admitir las plataformas de 64 bits – PatrickvL

21

Estos son los pasos:

1. Retire XPMan: Retire cualquier referencia a XPMan componente de su proyecto. XPMan agrega un manifiesto predeterminado al archivo ejecutable que impide que Windows vea nuestro manifiesto personalizado. No debe preocuparse por XP Theme provisto por XPMan, la compatibilidad con temas se conserva en el siguiente manifiesto.

2. Cree el manifiesto personalizado: Cree un archivo como Win7UAC.manifest en el directorio del proyecto (el nombre del archivo realmente no importa). añadir las siguientes líneas a Win7UAC.manifest:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity type="win32" name="App" version="3.1.0.0" processorArchitecture="*"/> 
    <dependency> 
    <dependentAssembly> 
     <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*"/> 
    </dependentAssembly> 
    </dependency> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <security> 
     <requestedPrivileges> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
     <!--The ID below indicates application support for Windows Vista --> 
     <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
     <!--The ID below indicates application support for Windows 7 --> 
     <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> 
    </application> 
    </compatibility> 
</assembly> 

Usted puede agregar más elementos a este manifiesto. También puede eliminar Microsoft.Windows.Common-Controls partes para deshabilitar el soporte de tema.

3. Compilar manifiesta a un recurso: Crear un archivo llamado Win7UAC.rc en el directorio de proyecto que contiene una línea como:

1 24 "Win7UAC.manifest" 

Para compilar este archivo, vaya a cmd, punto de proyectar directorio y ejecute comando siguiente:

brcc32.exe Win7UAC.rc 

4. Agregar recursos (el manifiesto) al proyecto: Simplemente añadir la siguiente línea en cualquier lugar que desee en uno de los archivos de la unidad del proyecto:

{$R 'Win7UAC.res'} 

Un lugar adecuado para añadir esta línea se encuentra en el archivo de proyecto principal (generalmente llamado Project1.dpr) y debajo de la línea de {$R *.res}.

5. Reconstruir el proyecto

6. Recuerde siempre que añada componente XPMan a cualquier de unidades de obra, este manifiesto UAC no funcionará correctamente.

+2

Ahorraré tiempo de búsqueda para ustedes ... < supportedOS Id = "{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" /> {4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} para Windows 8: las aplicaciones que establecen este valor en el manifiesto de la aplicación obtienen el comportamiento de Windows 8 – Rebelss

+0

Después de seguir todas estas instrucciones, me sale este error al intentar compilar mi proyecto, ¿alguna idea? "[Error de DCC] E2161 Advertencia: recurso duplicado: tipo 24 (definido por el usuario), ID 1; recurso de archivo myproject.res guardado; recurso de archivo Win7UAC.res descartado". – delphirules

+0

@delphirules: No he intentado esto por un tiempo. ¿Estás seguro de haber hecho todos los pasos con precisión? Avísame si todavía tienes problemas. Es posible que pueda disparar un WinWare VMWare y darle una oportunidad. – Isaac

2

Utilizando Delphi XE, tuve que desactivar 'Habilitar temas de tiempo de ejecución' en 'Proyecto' -> 'Opciones' -> 'aplicación' pestaña para que esto funcione.

Editar: lo siento, parece funcionar con esta opción habilitada.

+0

En mi caso usando Embarcadero C++ Builder XE, tuve que desmarcar esa opción para trabajar. – ruhalde

Cuestiones relacionadas