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?

È stato utile?

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:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top