web-dev-qa-db-fra.com

Comment ajouter un manifeste à un exécutable à l'aide de mt.exe?

J'essaie d'utiliser mt.exe du SDK Windows pour ajouter un manifeste à un fichier exécutable qui n'en a pas, en utilisant la ligne de commande suivante:

C:\winsdk61>mt.exe -nologo -manifest "r:\shared\hl.exe.manifest" -updateresource:"r:\shared\hl33m.exe;#1"

Malheureusement, lorsque je le fais, j'obtiens cette erreur:

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?

35
Colen

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"
32
Cristian Adam

Cela a fonctionné pour moi pour VS 2005:

  1. Créez un fichier texte nommé d'après l'exécutable avec l'extension manifest et assurez-vous qu'il se trouve dans le même chemin que vos fichiers de code; c'est-à-dire Form1.cs, etc. Par exemple, si le nom de votre application est UACTester.exe, votre fichier manifeste doit être nommé UACTester.exe.manifest.
  2. 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>
  1. Sur votre projet exécutable, ajoutez l'événement post-build suivant:

    "$(DevEnvDir)..\Tools\Bin\mt.exe" -nologo -manifest "$(TargetPath).manifest" -outputresource:"$(TargetPath)"

J'espère que cela t'aides. Bonne chance! - Matt Esterak

7
mesterak

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"

4
user403103