2009-09-14 35 views
24

estoy tratando de utilizar Mt.exe desde el SDK de Windows para agregar un manifiesto en un archivo ejecutable que no tiene uno, utilizando la siguiente línea de comandos:¿Cómo agrego un manifiesto a un ejecutable usando mt.exe?

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

Por desgracia, cuando lo haga, obtener 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, no se encontró el recurso del archivo - el archivo no tiene un manifiesto, es por eso que quiero agregar uno.

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

Respuesta

22

Debe utilizar /outputresource en lugar de /UpdateResource:.

La línea de comandos correcta sería:

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

También se puede utilizar de esta manera para incrustar el manifiesto dentro del archivo EXE:

Mt.exe -nologo -manifest "r: \ shared \ hl.exe.manifest" -outputresource: "r: \ shared \ hl33m.exe; 1"

7

Esto funcionó para mí para VS 2005:

  1. Crear archivo de texto nombrado después 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 esta:
<?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, añada el siguiente evento posterior a la generación:

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

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

Cuestiones relacionadas