Prevenir la elevación (UAC) para una aplicación que no la necesita [duplicar]

34

Esta pregunta ya tiene una respuesta aquí:

Habiendo migrado recientemente de Vista 32bit a Windows 7 64bit, uno de mis programas ahora requiere derechos de administrador.

Yo uso un editor de texto bastante exótico (Crimson Editor). Aunque no está diseñado para Vist / Win7, funcionó bien con Vista. Pero bajo Windows 7, el ejecutable del programa obtiene este escudo UAC agregado a su ícono (a pesar de que el indicador "Ejecutar como administrador" en la pestaña de compatibilidad no está configurado) y solicita la elevación cada vez que lo ejecuto.

¿Cómo determina Win7 que esta aplicación tipo bloc de notas necesita derechos de administrador? ¿Cómo puedo anular esta falsa heurística?

SealedSun
fuente

Respuestas:

22

No, la razón por la que Crimson Editor hace esto NO es porque no está firmado. (Y esto no es nuevo para Win7). Esto se debe a que el manifiesto de la aplicación, que está incrustado en tiempo de compilación, especifica requestedPrivilegeLevel="highestLevel".

Según esta publicación del foro , los desarrolladores de Crimson Editor cambiaron esto en la revisión 237-241. Hicieron esto porque la función "Agregar Crimson Editor a los menús contextuales de shell" requiere privilegios de administrador.

La solución a largo plazo sería para los desarrolladores de Crimson Editor corregir su manifiesto de aplicación. Deben agregarse a los menús contextuales del shell durante la instalación, o al menos decirles a los usuarios que tienen que ejecutar manualmente la aplicación elevada (que es fácil de hacer) en lugar de requerirla.

Para todas las aplicaciones con requestedPrivilegeLevel="highestLevel"su manifiesto (use la Vista de manifiesto para ver los manifiestos de la aplicación), puede usar el Kit de herramientas de compatibilidad de aplicaciones de Microsoft para calzar la aplicación con la corrección RunAsInvoker, que obliga a la aplicación a ejecutarse con sus tokens de usuario estándar.

Para obtener más información sobre cómo usar el Kit de herramientas de compatibilidad de aplicaciones, consulte esta publicación sobre cómo aplicarlo a Crimson Editor o las instrucciones generales .

the.d.stro
fuente
1
Alternativamente, puede reemplazar el manifiesto existente utilizando la herramienta de línea de comandos mt.exe, que puede obtener de forma gratuita con Visual Studio Express (de largo alcance, pero vale la pena si resuelve mucho este problema). Tenga en cuenta que la sustitución del manifiesto incrustado cambiará el archivo .exe, por lo que a) asegúrese de tener una copia en caso de que rompa las cosas yb) si se firmó romperá la firma (pero en este caso parece que tiene ya determinado que no está firmado de todos modos).
AdamV el
the.d.stro, eres un salvavidas, está funcionando muy bien.
phloopy
1
+1 para "corregir su aplicación" y usar el kit de herramientas AppCompat para corregir sus errores.
Ian Boyd
13

Descubrí que tenía dos aplicaciones que tenían este problema. Uno tenía 'actualización' en el nombre del archivo y el otro tenía 'actualización' en la 'FileDecsription'. Simplemente eliminé la palabra 'actualizar' de estas dos aplicaciones y no más advertencias de UAC. Encontré la información en 'Cómo funciona UAC' - 'Detección del instalador' en:

http://msdn.microsoft.com/en-us/library/aa905330.aspx

Que establece lo siguiente:

La detección del instalador solo se aplica a:

  • Ejecutables de 32 bits
  • Aplicaciones sin un nivel de ejecución solicitado
  • Procesos interactivos que se ejecutan como un usuario estándar con UAC habilitado

Antes de crear un proceso de 32 bits, se verifican los siguientes atributos para determinar si se trata de un instalador:

  • El nombre de archivo incluye palabras clave como "instalar", "configurar" y "actualizar".
  • Palabras clave en los siguientes campos de Recursos de versiones: Proveedor, Nombre de la empresa, Nombre del producto, Descripción del archivo, Nombre del archivo original, Nombre interno y Nombre de exportación.
  • Palabras clave en el manifiesto de aplicación de lado a lado incrustado en el ejecutable.
  • Palabras clave en entradas específicas de StringTable vinculadas en el ejecutable.
  • Atributos clave en los datos del archivo de recursos vinculados en el ejecutable.
  • Secuencias dirigidas de bytes dentro del ejecutable.

  • Nota: Las palabras clave y las secuencias de bytes se derivaron de características comunes observadas en varias tecnologías de instalación.

La belleza
fuente
7

Si tiene Visual Studio, puede hacer lo siguiente:

  1. Abra Visual Studio como administrador.
  2. Presione Ctrl-O para abrir un archivo
  3. Vaya a la carpeta donde está Crimson Editor y abra cedt.exe
  4. El archivo se abre con el editor de recursos y verá un árbol con una rama llamada RT_MANIFEST, expanda esto y haga doble clic en la entrada secundaria individual llamada "1 [Inglés Estados Unidos]"
  5. Alrededor de las tres cuartas partes del camino hacia abajo en la columna de la derecha, verá requestExecutionLevel level = "higherAvailable", cambie "higherAvailable" a "asInvoker" (Nota: el editor se abre en modo de sobreescritura de forma predeterminada.
  6. Guarde el archivo y ya está.

HTH

Kevan

kevanb
fuente
4

Aquí hay información sobre la heurística: http://msdn.microsoft.com/en-us/library/aa905330.aspx

Un manifiesto puede ayudar a controlar algunas de estas cosas.

AaronLS
fuente
MSDN habla de "incrustar" el manifiesto. ¿No se hace eso al compilar el programa? ¿Tengo que compilar Crimson Editor yo mismo para obtener ese manifiesto allí?
SealedSun
55
Puede agregar un archivo filename.exe.manifest en la misma carpeta y Windows lo leerá adecuadamente.
Factor Mystic