Как добавить манифест в исполняемый файл с помощью mt.exe? - PullRequest
34 голосов
/ 14 сентября 2009

Я пытаюсь использовать mt.exe из Windows SDK, чтобы добавить манифест в исполняемый файл, в котором его нет, с помощью следующей командной строки:

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

К сожалению, когда я это делаю, я получаю эту ошибку:

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.

Конечно, ресурс не найден в файле - у файла нет манифеста, поэтому я хочу добавить его.

Как я могу добавить манифест в исполняемый файл? Разве это не должно быть просто?

Ответы [ 3 ]

31 голосов
/ 15 сентября 2009

Вы должны использовать / outputresource вместо / updateresource: .

Правильная командная строка будет:

mt.exe -nologo -manifest "r:\shared\hl.exe.manifest" -outputresource:"r:\shared\hl33m.exe;#1"
7 голосов
/ 17 февраля 2011

Это сработало для меня для VS 2005:

  1. Создайте текстовый файл с именем исполняемого файла с расширением манифеста и убедитесь, что он находится по тому же пути, что и ваши файлы кода; например, Form1.cs и т. д. Например, если имя вашего приложения - UACTester.exe, то файл манифеста должен называться UACTester.exe.manifest.
  2. Убедитесь, что содержание манифеста в порядке. Я использую это:
    <?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. В исполняемый проект добавьте следующее событие после сборки:

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

Надеюсь, это поможет. Удачи! -Мат Эстерак

4 голосов
/ 05 августа 2010

Вы также можете использовать это, чтобы вставить манифест в файл EXE:

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

...