Comment ajouter un manifeste à un exécutable à l'aide de mt.exe?
Question
J'essaie d'utiliser mt.exe à partir du Kit de développement logiciel (SDK) Windows pour ajouter un manifeste à un fichier exécutable qui n'en contient pas, à l'aide de la ligne de commande suivante:
C:\winsdk61>mt.exe -nologo -manifest "r:\shared\hl.exe.manifest" -updateresource:"r:\shared\hl33m.exe;#1"
Malheureusement, je reçois le message d'erreur suivant:
mt.exe : general error c101008c: Failed to read the manifest from
the resource of file "r:\shared\hl33m.exe". The specified resource
type cannot be found in the image file.
Bien sûr, la ressource n'a pas été trouvée dans le fichier - le fichier n'a pas de manifeste, c'est pourquoi je veux en ajouter un.
Comment puis-je ajouter un manifeste à un fichier exécutable? Cela ne devrait-il pas être simple?
La solution
Vous devez utiliser / outputresource au lieu de / updateresource: .
La ligne de commande correcte serait:
mt.exe -nologo -manifest "r:\shared\hl.exe.manifest" -outputresource:"r:\shared\hl33m.exe;#1"
Autres conseils
Cela a fonctionné pour moi pour VS 2005:
- Créez un fichier texte nommé d'après l'exécutable avec le manifeste d'extension et assurez-vous qu'il se trouve dans le même chemin que vos fichiers de code. par exemple, Form1.cs, etc. Par exemple, si le nom de votre application est UACTester.exe, votre fichier manifeste doit être nommé UACTester.exe.manifest.
- Assurez-vous que le contenu du manifeste est bon. J'utilise celui-ci:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"
xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator"
uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<defaultAssemblyRequest permissionSetReference="Custom" />
<PermissionSet class="System.Security.PermissionSet"
version="1" ID="Custom" SameSite="site" />
</applicationRequestMinimum>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
</application>
</compatibility>
</asmv1:assembly>
-
Sur votre projet exécutable, ajoutez l'événement post-génération suivant:
" $ (DevEnvDir) .. \ Tools \ Bin \ mt.exe " -nologo -manifest " $ (TargetPath) .manifest " -outputresource: "$ (TargetPath)"
J'espère que ça aide. Bonne chance! -Matt Esterak
Vous pouvez également l'utiliser comme ceci pour incorporer le manifeste dans le fichier EXE:
mt.exe -nologo -manifest " r: \ shared \ hl.exe.manifest " -outputresource: "r: \ shared \ hl33m.exe; 1"