mt.exe:general error c101008d 最终原因和解决办法

 
2010年03月02日 下午 07:21
警告较为简单,主要是使用了原来RTL中字符串处理函数如strcpy等现在被认为不安全的函数造成的。

而错误就让人纳闷了,该错误为:

mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file ".\Release\jiaoshi.exe". f
最终原因已查明见最后一部分
上网找了一下,只有英文网页有相关讨论,懒得去翻译了。中文网页中倒是有一个,而且有解决办法,那就是在项目属性——配置属性——链接器——清单文件中, 把生成清单改成否就行了。

经过进一步的探索,发现在项目属性——配置属性——清单工具——输入和输出中,把嵌入清单改成否也行。

然而,问题虽然解决了,原因却还不明。因为,既然生成清单和嵌入清单是微软的默认设置,为什么却会出现错误呢?第一种方法的作者认为清单是.net程序 (托管程序)需要的,所以去掉后便能正常生成了,然而后一种方法仍然生成了清单,而且也能正常运行又作何解,而且微软的说明中也没有提到清单只是为CLR 程序准备的,而是应该所有程序都要加上清单。

更新:还有一种更简单的方法:如果编译前将所有打开的与该项目有关的文件都关掉,也可以解决问题。

最终原因已查明
由于VC需要把生成的文件中嵌入MANIFEST文件,而由于杀毒软件之类的会握有这个文件句柄(因为杀毒软件
发现这个EXE,DLL正在读写),于是VC就写不进去了,方法是暂时关闭杀毒软件,这样就不用
改写MANIFECT
我用的是瑞星杀毒软件,有这个问题.
Hi,

This might be due to antivirus holding open handle on the exe generated and thus when VS tries to embed the manifest it fails with access denied.
Is Antivirus running on your machine? Does this repro with Antivirus turned off?

If above is not the case can you provide us with a repro.

Thanks,

VC++ Team
posted @ 2010-09-06 13:20  Kane_BJ  阅读(1213)  评论(0编辑  收藏  举报