- 背景
manifest的介绍:
https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests
其背景是为了解决DLL Hell问题:
https://en.wikipedia.org/wiki/DLL_Helli
- 如何生成manifest文件
link选项
cl ... -link /MANIFEST[:{EMBED[,ID=resource_id]|NO}]
/MANIFEST : 生成.manifest文件
/MANIFEST:EMBED : 不生成.manifest文件,把内容直接打入可执行文件
/MANIFEST:NO : 不生成.manifest文件
貌似/MANIFEST:NO
和没有/MANIFEST
选项是一样的作用,就是不生成manifest。
关于ID=resource_id
的说明,简单的说就是,缺省情况下:
- 对于exe文件,缺省是值1
- 对于DLL文件,缺省值是2。
(参考:/MANIFEST (Create side-by-side assembly manifest, https://learn.microsoft.com/en-us/cpp/build/reference/manifest-create-side-by-side-assembly-manifest?view=msvc-170)
- 如何把.manifest文件打入可执行文件,以及如何从可执行文件提取.manifest文件
利用mt.exe工具:
- 从可执行文件提取manifest信息:
mt.exe -inputresource:<PGM>.exe;#1 -out:<PGM>.exe.manifest
- 把manifest写入可执行文件:
mt.exe -manifest <PGM>.exe.manifest -outputresource:<PGM>.exe;#1
关于#1
的定义,参考前面manifest的定义,缺省情况下EXE文件是1,DLL文件是2。
网友评论