Jak dodać manifest do pliku wykonywalnego za pomocą mt.exe?

Próbuję użyć mt.exe z zestawu Windows SDK, aby dodać manifest do pliku wykonywalnego, który go nie ma, za pomocą następującego wiersza poleceń:

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

Niestety, kiedy to robię, dostaję ten błąd:

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.

Oczywiście zasób nie został znaleziony w pliku - Plik nie ma manifestu, dlatego chcę go dodać.

Jak mogę dołączyć manifest do pliku wykonywalnego? Czy to nie powinno być proste?

Author: Jon Seigel, 2009-09-14

3 answers

Powinieneś użyć /outputresource zamiast / updateresource:.

Prawidłowa linia poleceń brzmiałaby:

mt.exe -nologo -manifest "r:\shared\hl.exe.manifest" -outputresource:"r:\shared\hl33m.exe;#1"
 29
Author: Cristian Adam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-14 21:44:04

To działało dla mnie na VS 2005:

  1. Utwórz plik tekstowy o nazwie wykonywalny z Extension manifest i upewnij się, że znajduje się w tej samej ścieżce, co pliki kodu; np.cs, itp. Na przykład, jeśli nazwa Twojej aplikacji to UACTester.exe wtedy twój manifest plik powinien być nazwany UACTester.exe.manifest.
  2. Upewnij się, że zawartość manifestu jest dobra. Używam tego:
    <?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. Do wykonywalnego projektu Dodaj następujący post-build Zdarzenie:

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

Mam nadzieję, że to pomoże. Powodzenia! -Matt Esterak
 7
Author: mesterak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-26 00:28:54

Możesz również użyć tego w ten sposób, aby osadzić manifest w pliku EXE:

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

 4
Author: user403103,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-05 14:26:00