2009-04-12 9 views
5

Les manifestes d'application Windows ont une grammaire très lâche - les parties non reconnues sont ignorées. Comment puis-je diagnostiquer quelles pièces sont reconnues et lesquelles ne le sont pas?Diagnostic des manifestes d'application Windows

Le problème principal à cette question est d'une application qui a un UAC côte à côte avec un manifeste requestedExecutionLevel de highestAvailable spécifié. Cela devrait désactiver la virtualisation de fichiers Vista, mais ce n'est pas le cas. Je veux savoir pourquoi. Le manifeste est utilisé, comme j'ai vérifié en introduisant intentionnellement une erreur syntaxique, mais je ne vois aucun moyen de déterminer comment il est utilisé.

Répondre

4

Voir mon commentaire sur Wylder - avez-vous essayé de mettre à jour l'horodatage du fichier exécutable &?
Que signifie "sxstrace" à partir d'une invite de commande élevée?
Pourriez-vous poster votre manifeste quelque part?

+0

L'utilitaire sxstrace, le détail sur mt.exe ne connaissant pas asm.v3, et les spécificités de la mise en cache étaient nouvelles pour moi. Le problème spécifique que je peux résoudre seul. Ce n'est pas urgent, en tout cas. Merci. –

0

Je passerais en revue par le documentation pour m'assurer qu'il est conforme aux spécifications, mais à part cela, il n'y a pas un outil automatisé pour faire la même chose pour autant que je sache.

+0

Merci. J'ai lu les articles MSDN, ainsi que le document "Windows Vista Developer Story". Je suppose, plus que tout, que cela me dérange qu'il y ait cette partie assez importante d'une application qui est modifiable par l'homme, mais qui ne peut apparemment pas être déboguée. –

+0

Il est regrettable, mais le meilleur que vous pouvez espérer est un vérificateur de syntaxe tiers (qui aurait ses propres bogues d'analyse) – lfaraone

+0

Le problème spécifique a été mentionné dans la question, mais il est d'ailleurs le principal point d'intérêt. :) –

4

J'ai eu le même problème: le gestionnaire de tâches a montré que la virtualisation était activée pour les applications en cours d'exécution malgré le fait que les applications se manifestent comme étant les plus élevées. J'ai essayé d'employer mt.exe pour manifester mes dossiers. Cela a marché sur certains mais pas sur d'autres. Ce comportement étrange m'a fait penser qu'il y avait un cache persistant dans Vista qui affectait les infos de l'UAC en fonction de l'horodatage d'un exe. La solution consistait à utiliser l'assistant manifeste de Resource Tuner.

+5

Votre évaluation est correcte. Il y a deux caches. La première, basée sur l'horodatage de l'exécutable, détermine si Windows doit prendre la peine de vérifier l'existence d'un manifeste (c'est-à-dire si vous ajoutez un manifeste, mettez à jour l'horodatage exe). La seconde est pour le contenu du manifeste, indexé sur l'horodatage du manifeste (qui pourrait être le même que pour l'exe s'il est incorporé) –

3

Il existe un cache.

Le cache de contexte d'activation SxS met en cache les fichiers .manifest. D'après ce que j'ai lu, cela ne fait que mettre en cache l'existence d'un manifeste.

Il est basé sur la mémoire et efface seulement sur un redémarrage - Cependant, je sais que, en fait, il ne s'active pas toujours sur un redémarrage et beaucoup d'autres le signalent aussi bien. J'ai trouvé c: \ windows \ sxs \ manifestCache et je me demande si ça recharge vraiment à partir de là au redémarrage.

La seule façon de forcer est de modifier la date modifiée sur le fichier .exe.

Également lorsque vous modifiez votre manifeste, si vous n'élevez pas votre éditeur, ce sera UAC virtualisé - de courtois la copie virtualisée est ignorée par le chargeur.

Références: 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

Questions connexes