如何使用mt.exe向可执行文件添加清单?

时间:2009-09-14 19:39:26

标签: windows manifest winapi mt

我正在尝试使用Windows SDK中的mt.exe将清单添加到没有清单的可执行文件中,使用以下命令行:

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 个答案:

答案 0 :(得分:31)

您应该使用 / outputresource 而不是 / updateresource:

正确的命令行是:

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

答案 1 :(得分:7)

对于VS 2005来说,这对我有用:

  1. 使用扩展名清单创建以可执行文件命名的文本文件,并确保它与代码文件位于同一路径中;例如,Form1.cs等。例如,如果您的应用程序名称是UACTester.exe,那么您的清单文件应该命名为UACTester.exe.manifest。
  2. 确保清单内容良好。我用这个:
  3.     <?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)"

    2. 希望这会有所帮助。祝好运! -Matt Esterak

答案 2 :(得分:4)

您也可以像这样使用它将清单嵌入EXE文件中:

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