Mt.exe

Mt.exe文件是生成已签名文件和目录的工具。 它在 Microsoft Windows 软件开发工具包 (SDK) 中提供。 Mt.exe要求清单中引用的文件与清单位于同一目录中。

Mt.exe使用安全哈希算法的 CryptoAPI 实现 (SHA-1) 生成哈希。 有关哈希算法的详细信息,请参阅哈希算法和签名算法。 哈希作为十六进制字符串插入清单中的 文件 标记。 尽管清单中的文件可能使用其他哈希方案,但该工具目前仅生成 SHA-1 哈希。

Mt.exe使用 Makecat.exe 从目录定义文件 (.cdf) 生成目录文件 (.cat) 。 此工具使用清单的名称和位置填充标准模板 CDF。 可以将此与 Makecat.exe 一起使用来生成程序集目录。

最新版本的 Windows SDK 中提供的 Mt.exe 版本也可用于为托管程序集和非托管并行程序集生成清单。

语法

mt.exe [-manifest:<component1.manifest><component2.manifest>] [-identity:<identity string>] 
[-rgs:<file1.rgs>] [-tlb:<file2.tlb>] [-dll:<file3.dll>] [-replacements:<XML filename>]
[-managedassemblyname:<managed assembly>] [-nodependency] [-category] [-out:<output manifest name>]
[-inputresource:<file4>;[#]<resource_id>] [-outputresource:<file5>;[#]<resource_id>] 
[-updateresource:<file6>;[#]<resource_id>] [-hashupdate[:<path to files>]] [-makecdfs] [-validate_manifest]
[-validate_file_hashes:<path to files>] [-canonicalize] [-check_for_duplicates] [-nologo] [-verbose]

命令行选项

Mt.exe使用以下不区分大小写的命令行选项。

选项 说明
-清单

指定清单文件的名称。 若要修改单个清单,请指定一个清单文件名。 例如,component.manifest。

若要合并多个清单,请在此处指定源清单的名称。 使用 -out-outputresource 或 -updateresource 选项指定更新清单的名称。 例如,以下命令行请求一个操作,该操作将两个清单(即 man1.manifest 和 man2.manifest)合并到新的清单 man3.manifest 中。

mt.exe -manifest man1.manifest man2.manifest -out:man3.manifest

-manifest 选项不需要冒号 (:) 。

-身份

提供清单的 assemblyIdentity 元素的属性值。 -identity 选项的参数是一个字符串值,其中包含用逗号分隔的字段中的属性值。 在第一个字段中提供 name 属性的值,而不包括“name=”子字符串。 所有剩余字段使用以下格式指定属性及其值: <attribute name>=<attribute_value>。

例如,使用以下信息更新清单的 assemblyIdentity 元素:

<assemblyIdentity type=“win32” name=“Microsoft.Windows.SampleAssembly” version=“6.0.0.0” processorArchitecture=“x86” publicKeyToken=“a5aaf5ba15723d5”/>

在命令行上包含以下 -identity 选项:

-identity:“Microsoft.Windows.SampleAssembly, processorArchitecture=x86, version=6.0.0.0, type=win32, publicKeyToken=a5aaf5ba15723d5”

-rgs

指定注册脚本的名称 (.rgs) 文件。 使用 -rgs 选项需要 -dll 选项。

-Tlb

指定类型库 (.tlb) 文件的名称。 使用 -tlb 选项需要 -dll 选项。

-Dll

指定动态链接库 (DLL) 文件的名称。 如果使用 -rgs 或 -tlb 选项,则mt.exe需要 -dll 选项。 指定要最终从 .rgs 或 .tlb 文件生成的 DLL 的名称。

例如,以下命令请求从 .rgs 和 .tlb 文件生成清单的操作。

mt.exe -rgs:testreg1.rgs -tlb:testlib1.tlb -dll:test.dll -replacements:rep.manifest -identity:“Microsoft.Windows.SampleAssembly, processorArchitecture=x86, version=6.0.0.0, type=win32, publicKeyToken=a5aaf5ba15723d5” -out:rgstlb.manifest

-更换

指定包含 .rgs 文件中可替换字符串的值的文件。

-managedassemblyname

从指定的托管程序集生成清单。 与 -nodependency 选项一起使用可生成不含依赖元素的清单。 与 -category 选项一起使用可生成具有类别标记的清单。 例如,如果 managed.dll 是托管程序集,则以下命令行会从 managed.dll 生成 out.manifest。

mt.exe -managedassemblyname:managed.dll -out:out.manifest

-nodependency

指定一个操作,该操作生成不带依赖元素的清单。 -nodependency 选项需要 -managedassemblyname 选项。 例如,如果 managed.dll 是托管程序集,则以下命令行将从managed.dll生成 out.manifest,而无需提供依赖项信息。

mt.exe -managedassemblyname:managed.dll -out:out.manifest -nodependency

-类别

指定生成具有类别标记的清单的操作。 -category 选项需要 -managedassemblyname 选项。 例如,如果 managed.dll 是托管程序集,则以下命令行会从具有类别标记的managed.dll生成 out.manifest。

mt.exe -managedassemblyname:managed.dll -out:out.manifest -category

-nologo

指定在不显示标准 Microsoft 版权数据的情况下运行的操作。 如果 mt.exe 作为生成过程的一部分运行,则此选项可用于防止将不需要的信息写入日志文件。

-out

指定更新的清单的名称。 如果这是单清单操作,并且省略 了 -out 选项,则会修改原始清单。

-inputresource

指定对从 RT_MANIFEST 类型的资源获取的清单执行的操作。 如果在未指定资源标识符的情况下使用 -inputresource 选项, <resource_id>,则操作将使用值CREATEPROCESS_MANIFEST_RESOURCE。

例如,以下命令请求一个操作,该操作合并来自 DLL 的清单、dll_with_manifest.dll和清单文件 man2.manifest。 合并的清单由另一个 DLL 的资源文件中的清单接收,dll_with_merged_manifests。

mt.exe -inputresource:dll_with_manifest.dll;#1 -manifest man2.manifest -outputresource:dll_with_merged_manifest.dll;#3

若要从 DLL 中提取清单,请指定 DLL 文件名。 例如,以下命令从 lib1.dll 提取清单,man3.manifest 接收提取的清单。

mt.exe -inputresource:lib.dll;#1 -out:man3.manifest

-outputresource

指定一个操作,该操作生成要由类型为 RT_MANIFEST 的资源接收的清单。 如果在未指定资源标识符的情况下使用 -outputresource 选项, <resource_id>,则操作将使用值CREATEPROCESS_MANIFEST_RESOURCE。

-updateresource

指定等效于使用具有相同参数的 -inputresource-outputresource 选项的操作。 例如,以下命令请求一个操作,该操作计算指定路径上的文件的哈希,并更新可移植可执行文件的资源清单 (PE) 。

mt.exe -updateresource:dll_with_manifest.dll;#1 -hashupdate:f:\files

-hashupdate

计算指定路径处的文件的哈希值,并使用此值更新 File 元素的哈希属性的值。

例如,以下命令请求一个合并两个清单文件(man1.manifest 和 man2.manifest)的操作,并更新接收合并信息 merged.manifest 的清单中 File 元素的哈希属性的值。

mt.exe -manifest man1.manifest man2.manifest -hashupdate:d:\filerepository -out:merged.manifest

如果未指定文件的路径,则操作将搜索指定用于接收更新的清单的位置。 例如,以下命令请求一个操作,该操作使用通过搜索 updated.manifest 位置找到的文件计算更新的哈希值。

mt.exe -manifest yourComponent.manifest -hashupdate -out:updated.manifest

-validate_manifest

指定一个操作,该操作执行语法检查清单与清单架构的一致性。 例如,以下命令请求检查来验证 man1.manifest 与其架构的一致性。

mt.exe -manifest man1.manifest -validate_manifest

-validate_file_hashes

指定验证清单 的 File 元素的哈希值的操作。 例如,以下命令请求验证 man1.manifest 的所有 File 元素的哈希值的操作。

mt.exe -manifest man1.manifest -validate_file_hashes:“c;\files”

-canonicalize

指定将清单更新为规范形式的操作。 例如,以下命令将 man1.manifest 更新为规范形式。

mt.exe -manifest man1.manifest

-check_for_duplicates

指定检查清单中是否存在重复元素的操作。 例如,以下命令检查 man1.manifest 中是否存在重复元素。

mt.exe -man1.manifest -check_for_duplicates

-makecdfs

生成 .cdf 文件以创建目录。 例如,以下命令请求更新哈希值并生成 .cdf 文件的操作。

mt.exe -manifest comp1.manifest -hashupdate -makecdfs -out:updated.manifest

-verbose 显示详细的调试信息。
-? 当使用 -?, 或没有选项和参数运行时,Mt.exe显示帮助文本。

并行程序集开发工具