2010-11-09 9 views
22

me di cuenta el siguiente fenómeno:¿Cómo evito el UAC cuando mi nombre de archivo EXE contiene la palabra "actualizar"?

Un ejecutable generado con Delphi 7 y parte del nombre incluyendo "Update" (por ejemplo, "UpdateMyApp.exe") hace que el UAC que intervenir para mostrar una advertencia como "qué quiere permita que el programa realice cambios en su computadora ".

Esto sucede con una sencilla aplicación de hello world. Mostrar el archivo en el explorador muestra el símbolo del escudo superpuesto al ícono de la aplicación.

Tan pronto como cambia el nombre del exe, el protector desaparece y la aplicación se inicia sin advertencias.

Como se mencionó, esto solo sucede con los programas creados con Delphi 7 y que se iniciaron en Windows 7 (supongo que en Vista) pero no en los p. WinXP.

Una comprobación rápida con Delphi 2007 muestra que este problema se ha ido.

divertido ... ... Scarying

Además de cambiar el nombre del archivo, ¿qué puedo hacer para evitar esto?

Respuesta

43

Este comportamiento se debe a que las aplicaciones compiladas con Delphi 7 de forma predeterminada no tienen un manifiesto, o tienen uno sin el atributo requestedExecutionLevel. Debido a que Windows piensa que es necesario tener acceso de administrador cuando el nombre de la aplicación contiene palabras como Setup o Update. este proceso se llama Installer Detection Technology y se presentó junto con UAC con Windows Vista.

Desde el sitio de MSDN:

detección de instaladores sólo se aplica a:

  1. 32 ejecutables bits

  2. Aplicaciones sin requestedExecutionLevel

  3. procesos interactivos que se ejecutan como una Usuario estándar con LUA habilitado

Antes se crea un proceso de 32 bits, los siguientes atributos se comprueban para determinar si se trata de una instalador:

  • nombre incluye palabras clave como "instalar", "Configuración", " actualización, "etc.
  • Palabras clave en los siguientes campos del recurso de versiones: Proveedor, Nombre de la empresa, Nombre del producto, Archivo Descripción, Nombre de archivo original, Nombre interno y Nombre de la exportación.
  • Palabras clave en el manifiesto lado a lado incrustado en el ejecutable.
  • Palabras clave en las entradas de StringTable específicas vinculadas en el ejecutable.
  • Atributos clave en los datos de RC vinculados en el ejecutable.
  • Secuencias de bytes identificadas dentro del ejecutable.

Además Delphi 2007 por defecto incluyen un manifiesto en sus aplicaciones con la tecla requestedExecutionLevel.

Esto es un manifiest de muestra creado por delphi 2007. Puede ver que este manifiesto tiene el atributo requestedExecutionLevel en el contenido.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity 
    type="win32" 
    name="CodeGear RAD Studio" 
    version="11.0.2902.10471" 
    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="asInvoker" 
      uiAccess="false"/> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</assembly> 
+0

Rob, muchas gracias por esa información útil. Chris – Christian

+0

esto explica por qué ocurre, pero no cómo resolverlo – Youda008

+0

Sí lo hace. Incluya un manifiesto usted mismo. Si está utilizando Delphi 7, deberá compilar el manifiesto en un archivo .RES utilizando un archivo fuente .RC y RC.exe para compilarlo, y luego vincularlo usando '{$ R MyManifest.res}' - Versiones posteriores de Delphi como XE y en adelante incluye soporte directo en el IDE para seleccionar tu propio archivo .manifest –

Cuestiones relacionadas