问题是我昨天发的,如下:
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改名,程序无法运行。现在请问我应该怎么办?多谢

解决方案 »

  1.   

    拷贝开发机器下的
    Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.MFC
    相对应的文件dll manifest文件 也拷贝过去
    拷到你的exe目录,再试试,
      

  2.   

    看这里,修改policy等
    http://eparg.spaces.live.com/blog/cns!59BFC22C0E7E1A76!3944.entry
      

  3.   

    楼主你说了:"只对机子里没有更新的msvcr80.dll成立",那就好办啊,那个VC++ Run Time 2005 Restribution是可以在增加删除程序里卸载的,你只要卸载掉,再用你上面的.manifest搞定就可以了.再不行的话,你在DOS下给对方的msvcr80.dll替换掉.
      

  4.   

    这个不错,非常感谢,我马上试,最搞笑的是我昨天还专门研究了一下wangwang是怎么干的,因为我的机子中也就wangwang自带了msvcr80.dll
      

  5.   

    1433不是vc++ run time 2005 restribution带的。而是.net framework 2.0 sp1 /3.0/3.5带的,卸掉可能导致用户其他程序崩溃的。