delphi - ¿Cómo evito el UAC cuando mi nombre de archivo EXE contiene la palabra "actualizar"?
delphi-7 (1)
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 eso, Windows piensa que necesita acceso de administrador cuando el nombre de su 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:
La detección del instalador solo se aplica a:
Ejecutables de 32 bits
Aplicaciones sin un nivel de ejecución requerido
Procesos interactivos que se ejecutan como un usuario estándar con LUA habilitado
Antes de crear un proceso de 32 bits, se verifican los siguientes atributos para determinar si es un instalador:
- El nombre de archivo incluye palabras clave como "instalar", "configurar", "actualizar", etc.
- Palabras clave en los siguientes recursos de control de versiones: proveedor, nombre de la empresa, nombre del producto, descripción del archivo, nombre de archivo original, nombre interno y nombre de exportación.
- Palabras clave en el manifiesto lado a lado incrustado en el ejecutable.
- Palabras clave en entradas específicas de StringTable vinculadas en el ejecutable.
- Atributos clave en los datos de RC vinculados en el ejecutable.
- Secuencias de bytes dirigidas dentro del ejecutable.
Además Delphi 2007 de forma predeterminada incluye un manifiesto en sus aplicaciones con la clave requestedExecutionLevel
ExecutionLevel.
Esta es una variedad de muestra creada 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>
Noté el siguiente fenómeno:
Un ejecutable creado con Delphi 7 y parte del nombre que incluye "Update" (por ejemplo, "UpdateMyApp.exe") hace que UAC intervenga para mostrar una advertencia como "¿desea permitir que el programa realice cambios en su computadora?".
Esto sucede con una simple 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 escudo desaparece y la aplicación comienza sin advertencias.
Como se mencionó, esto solo sucede con los programas creados con Delphi 7 y que comenzaron en Windows 7 (asumo lo mismo en Vista) pero no en, por ejemplo, WinXP.
Una comprobación rápida con Delphi 2007 muestra que este problema ya no existe.
Gracioso ... asustando ...
Además de cambiar el nombre del archivo, ¿qué puedo hacer para evitar esto?