windows manifest winapi mt

windows - ¿Cómo agrego un manifiesto a un ejecutable usando mt.exe?



manifest winapi (3)

Debería usar / outputresource en lugar de / updateresource:.

La línea de comando correcta sería:

mt.exe -nologo -manifest "r:/shared/hl.exe.manifest" -outputresource:"r:/shared/hl33m.exe;#1"

Estoy tratando de usar mt.exe desde el SDK de Windows para agregar un manifiesto a un archivo ejecutable que no tiene uno, usando la siguiente línea de comando:

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

Desafortunadamente, cuando lo hago, obtengo este error:

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.

Por supuesto, el recurso no se encontró en el archivo; el archivo no tiene un manifiesto, por eso quiero agregar uno.

¿Cómo puedo agregar un manifiesto a un archivo ejecutable? ¿No debería ser esto simple?


Esto funcionó para mí para VS 2005:

  1. Cree un archivo de texto con el nombre de ejecutable con manifiesto de extensión y asegúrese de que esté ubicado en la misma ruta que sus archivos de código; es decir, Form1.cs, etc. Por ejemplo, si el nombre de su aplicación es UACTester.exe, su archivo de manifiesto se debe llamar UACTester.exe.manifest.
  2. Asegúrese de que el contenido del manifiesto sea bueno. Yo uso este:

<?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. En su proyecto ejecutable, agregue el siguiente evento de creación posterior:

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

Espero que esto ayude. ¡Buena suerte! -Matt Esterak


También puede usarlo así para incrustar el manifiesto dentro del archivo EXE:

mt.exe -nologo -manifest "r: / shared / hl.exe.manifest" -outputresource: "r: / shared / hl33m.exe; 1"