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