Как добавить манифест в исполняемый файл с помощью mt.exe?

StackOverflow https://stackoverflow.com/questions/1423492

  •  07-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь использовать 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.

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

    <код> & Quot; $ (DevEnvDir) .. \ Tools \ Bin \ mt.exe & Quot; -nologo -manifest " $ (TargetPath) .manifest " -outputresource: & Quot; $ (TargetPath) & Quot;

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

    Вы также можете использовать его следующим образом для встраивания манифеста в файл EXE:

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top