程序运行msvcr80.dll不匹配问题

问题如下:

vs2005编译出来的程序,发布时强制让用户安装了C++ Run Time 2005 Restribution,但在个别用户处运行时都出现如下错误:
Error Signature:AppVer 2.0.1.11 ModName: msvcr80.dll ModVer 8.0.50727.1433 Offset 0004f029
我在google上搜了一下,发现很多软件譬如OutLook, Avg等等
http://freeforum.avg.com/read.php?14,137193,page=1,backpage=4,sv=
http://www.eggheadcafe.com/conversation.aspx?messageid=31717861&threadid=31717861
都有这种类似的运行问题,主要应该是mfc动态库造成的。
现在我想要在我的机子上重复这个bug,便于我调试。我试过自己装一个.net framework 2.0 SP1,但还是没法重复。

一种方法是在.exe旁边加manifest指定msvcr80.dll(version 762)的库,我试下来发现这种方法只对机子里没有更新的msvcr80.dll成立,当有更新的msvcr80.dll时,程序不会用同一目录里的 msvcr80.dll.下面两种试验方法都可证明:
1. 在程序中用GetModuleFileName取一下dll的完整路径,发现为1433版本库路径。
2. 把1433的msvcr80.dll改名,程序无法运行。

 

解决方法:

http://davidlenihan.com/2007/07/winsxs.html

http://eparg.spaces.live.com/blog/cns!59BFC22C0E7E1A76!3944.entry

http://blog.kalmbachnet.de/?postid=80

总结一下:

(1):在自带的manifest(集成或者不集成都可以)去掉publicKeyToken这项,然后把相应的.dll放在.exe(dll)目录。

(2): 让用户修改policy文件,去掉依存关系。

(3): 可能装一个vs2008的CRT Restirbution就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值