从VS2005开始,M$发明了一种高科技手段的来加载各种版本的ATL,MFC,CRT,C++标准库CRT的DLL运行库,以解决DLL Hell问题,那就是manifest文件.
我个人认为没有比这更SB的DLL发布方式了,问题更加严重了.
于是出现了更多的VS2005编译出的程序不能在某些机器上运行的情况,因为msvcrt80.dll就有若干不兼容的小版本,如:
8.0.50608.0/8.0.50727.42/8.0.50727.163/8.0.50727.762(VS80sp1)/8.0.50727.1433等等,这些安装在Windows\WinSxS (WinSex?)对于一个使用各种第三方的没有源代码的lib的程序,每个第三方库对应的msvcrt80版本都不能漏装,关键是你到哪里去找这些版本的Debug版的DLL.
众人纷纷讨论解决该问题的技巧和心得体会,大部分人使用静态联编了事,惹不起我还躲不起吗.而我至今没有发现一种简单可靠的发布绿色版的使用动态运行时库Vs2005程序的方法,而且我不喜欢静态联编,所以我坚持VC6和Vs2003.
VS2005肯定是要生成manifest资源的,唯一能指定的是:这个manifest资源是作为执行文件的资源数据内嵌,还是生成为一个独立的文件.
工程属性 -> 配置属性 -> 清单工具 -> 输入与输出 -> 嵌入清单 -> 是/否.
如果,生成为一个独立的文件,再删除这个文件,运行程序会报错,"由于应用程序配置不正确,未能启动此应用程序。请查看清单文件查找可能的错误。".
就是说,想用VS2005以上的运行库,就必须有manifest资源,不管是内嵌还是独立文件.