2009-04-12 15 views
5

Los manifiestos de aplicación de Windows tienen una gramática muy suelta: se ignoran las partes no reconocidas. ¿Cómo puedo diagnosticar qué partes son reconocidas y cuáles no?Diagnóstico de manifiestos de aplicación de Windows

El problema que lleva a esta pregunta es con una aplicación que tiene un UAC lado a lado manifiesta con una requestedExecutionLevel de highestAvailable especificado. Esto debería desactivar la virtualización de archivos Vista, pero no es así. Quiero averiguar por qué. El manifiesto se está utilizando, como comprobé al introducir intencionalmente un error sintáctico, pero no veo forma de determinar cómo se usa.

Respuesta

4

Ver mi comentario a Wylder - ¿ha intentado actualizar la marca de tiempo del manifiesto ejecutable &?
¿Qué ejecuta "sxstrace" desde un símbolo del sistema elevado?
¿Podría publicar su manifiesto en alguna parte?

+0

La utilidad sxstrace, el detalle sobre mt.exe no conoce asm.v3, y los detalles del almacenamiento en caché eran nuevos para mí. El problema específico que puedo resolver por mi cuenta. No es urgente, en cualquier caso. Gracias. –

0

Lo revisaría a través del documentation para asegurar que cumpla con las especificaciones, pero aparte de eso no hay una herramienta automatizada para hacer lo mismo que yo sepa.

+0

Gracias. Leí los artículos de MSDN y el documento "Windows Vista Developer Story". Supongo que, más que nada, me molesta que exista esta parte bastante importante de una aplicación que es editable por los humanos, pero que aparentemente no se puede depurar. –

+0

Es lamentable, pero lo mejor que podría esperar es un corrector de sintaxis de terceros (que tendría sus propios errores de análisis) – lfaraone

+0

El problema específico se mencionó en la pregunta, pero es además del principal punto de interés. :) –

4

Tuve el problema similar: el administrador de tareas mostró que la virtualización se habilitó para las aplicaciones que ejecutan a pesar de que las aplicaciones se manifiestan como highestAvailable. Intenté usar mt.exe para manifestar mis archivos. Funcionó en algunos pero no en otros. Ese extraño comportamiento me hizo pensar que había un caché persistente en Vista que afectaba la información de UAC basada en la marca de tiempo de un exe. La solución fue usar el asistente de manifiesto desde Resource Tuner.

+5

Su evaluación es correcta. Hay dos cachés El primero, basado en la marca de tiempo del ejecutable, determina si Windows debería molestarse en verificar la existencia de un manifiesto (es decir, si agrega un manifiesto, actualice la marca de tiempo del exe). El segundo es para el contenido del manifiesto, desmarcado de la marca de tiempo del manifiesto (que podría ser el mismo que para el exe si está incrustado) –

3

Hay un caché.

La memoria caché de contexto de activación de SxS almacena en caché los archivos .manifest.

Según lo que he leído, supuestamente solo almacena en caché la existencia de un manifiesto.

Se basa en la memoria y se borra solo en un reinicio - SIN EMBARGO, sé de hecho que no siempre es claro en un reinicio y muchos otros informan esto también. Encontré c: \ windows \ sxs \ manifestCache y me pregunto si realmente vuelve a cargar desde allí al reiniciar.

La única forma de forzar es cambiar la fecha de modificación en el .exe.

También tenga mucho cuidado al editar su archivo de manifiesto, si no eleva su editor, será UAC virtualizado - de la copia virtualizada es ignorada por el cargador.

Referencias: http://blogs.msdn.com/b/junfeng/archive/2006/10/25/touch-the-exe-after-you-added-a-manifest-for-it-in-vista.aspx http://blogs.msdn.com/b/junfeng/archive/2007/10/01/vista-activation-context-cache.aspx

Cuestiones relacionadas