高分求高手!!嵌入清单是什么意思

来源:百度知道 编辑:UC知道 时间:2024/06/17 05:10:02
vs2005中的嵌入清单是什么意思,有何用处,为什么有时当嵌入清单时程序无法运行
谢谢,还问一下:那么清单文件里主要装的是什么呢 是程序运行的步骤?还是一些临时文件或者别的?

在VS 2005中建立Win32工程时(以VS 2005中文版为例),你可能会遇到这样的运行错误:“没有找到MSVCP80D.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。”(还可能是其它几个类似的文件:MSVCR80D.dll、MSVCM80D.dll)。对于VS2005新手,可能遇到的第一个问题便是此问题。

一直使用VC6进行开发测试,最近准备把平台转移到VS2005(过些天就应该转VS2008了,呵呵)上来。于是,决定先把CppUnit转移到此平台上来。在VS2005中编译CppUnit所遇到的问题不多,虽然没VC6方便。但是在测试编译好的CppUnit库时却遇到了困难:把以前在VC6中写的AES移植过来(其使用了CppUnit进行单元测试),在运行时却遇到了如上错误。刚开始以为可能是CppUnit没有编译好,重新编译CppUnit多次,调整编译参数,但始终有此错误,并且此错误有时出现有时不出现,这更晕了,大量时间就这样浪费了。等我静下来,才觉得可能是VS 2005的原因,于是上网搜索此错误信息,终于找到了问题所在。 VS 2005在生成可执行文件时使用了一种新的技术,该技术生成的可执行文件会伴随生成一个清单文件(manifest file)(.manifest后缀文件)(其本质上是XML文档,你可以用文本编辑器打开看看),并在链接完成后将该清单文件嵌入到exe文件中(默认情况下)。而在FAT32文件系统中,在处理清单文件阶段,当增量链接时不能完成清单文件的更新(默认情况下),于是造成清单文件嵌入失败,从而使该exe文件运行时没有相应的清单文件而运行失败并提示如上错误。 解决方案很多,列举如下:
1. 由于这是在链接动态运行库出现的问题,所以你可以选择代码生成的连接方式为/MTd而非/MDd,不用这些DLL文件从而避免问题的出现。该方法有一个很显然的缺点:适用范围有限,并且也不是我等提倡的解决问题的方式,不推荐该方法。 2. 既然跟FAT32系统有关,那么我们可以选择在NTFS文件系统中开发从而避免该问题,此方法同上,也是采用的回避问题的方式,不为我等提倡。 3. 该方法仍与FAT32有关:在项目的“属性|配置属性|清单工具|常规”中的“使用FAT32解决办法”