Come faccio ad aggiungere un manifest a un eseguibile usando mt.exe?
Domanda
Sto cercando di utilizzare mt.exe dall'SDK di Windows per aggiungere un manifest a un file eseguibile che non ne ha uno, usando la seguente riga di comando:
C:\winsdk61>mt.exe -nologo -manifest "r:\shared\hl.exe.manifest" -updateresource:"r:\shared\hl33m.exe;#1"
Sfortunatamente, quando lo faccio, ottengo questo errore:
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.
Ovviamente la risorsa non è stata trovata nel file - il file non ha un manifest, ecco perché voglio aggiungerne uno.
Come posso aggiungere un manifest a un file eseguibile? Non dovrebbe essere semplice?
Soluzione
Dovresti usare / outputresource invece di / updateresource: .
La riga di comando corretta sarebbe:
mt.exe -nologo -manifest "r:\shared\hl.exe.manifest" -outputresource:"r:\shared\hl33m.exe;#1"
Altri suggerimenti
Questo ha funzionato per me per VS 2005:
- Crea un file di testo che prende il nome dall'eseguibile con l'estensione manifest e assicurati che si trovi nello stesso percorso dei tuoi file di codice; ad es. Form1.cs, ecc. Ad esempio, se il nome dell'app è UACTester.exe, il file manifest deve essere denominato UACTester.exe.manifest.
- Assicurati che il contenuto del manifest sia buono. Io uso questo:
<?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>
-
Nel tuo progetto eseguibile, aggiungi il seguente evento post-build:
" $ (DevEnvDir) .. \ Tools \ Bin \ Mt.exe " -nologo -manifest " $ (TargetPath) .manifest " -outputresource: " $ (TargetPath) "
Spero che questo aiuti. In bocca al lupo! -Matt Esterak
Puoi anche usarlo in questo modo per incorporare il manifest nel file EXE:
mt.exe -nologo -manifest " r: \ shared \ hl.exe.manifest " -outputresource: " r: \ shared \ hl33m.exe; 1 "