2009-04-12 3 views
5

I manifest di applicazioni Windows hanno una grammatica molto ampia - le parti non riconosciute vengono ignorate. Come posso diagnosticare quali parti sono riconosciute e quali no?Diagnosi manifesti di applicazioni di Windows

Il problema principale di questa domanda è con un'applicazione che ha un UAC side-by-side manifesta con un requestedExecutionLevel di highestAvailable specificato. Questo dovrebbe disattivare la virtualizzazione dei file di Vista, ma non è così. Voglio scoprire perché. Il manifest viene utilizzato, come ho verificato introducendo intenzionalmente un errore sintattico, ma non vedo alcun modo per determinare come viene utilizzato.

risposta

4

Vedere il mio commento a Wylder - hai provato ad aggiornare il timestamp del file eseguibile & manifest?
Cosa esegue "sxstrace" da un prompt dei comandi con privilegi elevati?
Potresti postare il tuo manifest da qualche parte?

+0

L'utilità sxstrace, il dettaglio su mt.exe che non conosce asm.v3, e le specifiche del caching erano nuove per me. Il problema specifico che posso risolvere da solo. Non è urgente, in ogni caso. Grazie. –

0

Esaminerei tramite lo documentation per assicurarmi che sia conforme alle specifiche, ma a parte questo non esiste uno strumento automatico per fare la stessa cosa per quanto ne so.

+0

Grazie. Ho letto gli articoli MSDN e il documento "Windows Vista Developer Story". Immagino che, più di ogni altra cosa, mi venga da pensare che ci sia questa parte abbastanza importante di un'applicazione che è modificabile dall'uomo, ma che apparentemente non può essere sottoposta a debug. –

+0

È sfortunato, ma il meglio che si possa sperare è un controllo di sintassi di terze parti (che avrebbe i propri bug di analisi) – lfaraone

+0

Il problema specifico è stato menzionato nella domanda, ma è oltre al principale punto di interesse. :) –

4

Avevo il problema simile: il task manager mostrava che la virtualizzazione era abilitata per le app nonostante le app si manifestassero come più alte disponibili. Ho provato a utilizzare mt.exe per manifestare i miei file. Ha funzionato su alcuni ma non su altri. Quel strano comportamento mi ha fatto pensare che ci fosse un po 'di cache persistente in Vista che riguardava le informazioni UAC in base al timestamp di un exe. La soluzione era usare la procedura guidata manifest da Resource Tuner.

+5

La tua valutazione è corretta. Ci sono due cache. Il primo, basato sul timestamp dell'eseguibile, determina se Windows dovrebbe preoccuparsi di verificare l'esistenza di un manifest (ad esempio se si aggiunge un manifest, si aggiorna il timestamp exe). Il secondo è per il contenuto del manifest, cancellato dal timestamp del manifest (che potrebbe essere lo stesso dell'exe se è incorporato) –

3

C'è una cache.

La cache di contesto SxS Activation memorizza nella cache i file .manifest.

Da quello che ho letto, si presume che memorizzi solo l'esistenza di un manifest.

È basato sulla memoria e si cancella solo su un riavvio - TUTTAVIA, so per certo che non si cancella sempre al riavvio e molti altri segnalano anche questo. Ho trovato c: \ windows \ sxs \ manifestCache e mi chiedo se si ricarica davvero da lì al riavvio.

L'unico modo per forzare è modificare la data di modifica su .exe.

Anche quando si modifica il manifest, se non si eleva l'editor, verrà virtualizzato UAC - di coures la copia virtualizzata viene ignorata dal loader.

Riferimenti: 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