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?

Était-ce utile?

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:

  1. 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.
  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-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"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top