用VS2005编译的应用程序在其它VS2005机器不能正常运行的原因和解决办法

现象:

1)使用高版本的VS编译C++可执行程序在其它计算机上无法运行,甚至带上开发机的运行库仍然无法解决问题;

2)使用高版本的VS编译C++动态链接库在低版本的VS中使用时报错,无法使用。

先给出解决办法(以下均对Release程序而言,Debug配置与此相仿):

1.在高版本的环境下使用VS新建test对话框mfc程序,假设test工程在d:/下,会产生这样两个目录:

  d:/test/

  d:/test/test/

1.不做任何改动,选择Release,编译程序。注意产生两个目录,我们只关注两个文件:

  d:/test/release/

  d:/test/test/release/

让我们关注两个文件:

  d:/test/release/test.exe

  d:/test/test/release/test.exe.intermediate.mainifest

这个时候,release程序只能有高版本VS运行库的计算机环境下运行,在低版本VS运行库的计算机环境中无法运行,即前面提到的现象1.下面我们开始做点事情,让这个test对话框可以在其它环境下也能够运行(我使用的测试环境是XP32位,顺便提一下,开发机为WIN7 64位)

使用文本编辑工具打开文件test.exe.intermediate.mainifest,我们看一下这个文件的内容:

 <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
  <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
 <dependency>
  <dependentAssembly>
  <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50727.6195' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
 </dependency>
 <dependency>
 <dependentAssembly>
 <assemblyIdentity type='win32' name='Microsoft.VC80.MFC' version='8.0.50727.6195' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
 <dependency>
 <dependentAssembly>
 <assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*' />
 </dependentAssembly>
</dependency>
 </assembly>



复制代码

我们着重关注一下version属性这里的值为8.0.50727.6195。把这里的6195修改为762,如果你的版本号与上面列出的版本号不一致,动动脑子,找出对应的正确的版本号。

修改完这个文件,将这个文件另存一下,文件名自己起,建议名字修改为test.mainifest,并将其放至一个安全位置与其它mainifest文件统一管理。

3.修改工作做完了,接下来我们修改VS的配置,让这个配置在重新编译程序的时候能起到作用。打开工程选项 project->property->linker->mainifest file(使用中文版VS的自己找对应选项)。将选项generate mainifest由Yes修改为No(如果你已将mainifest文件统一管理,这个选项修改不修改关系应该不大,本人没有试过,有兴趣的可以试一下)。接下来一个修改是最关键的:project->property->mainifest tool->input and output。将additional mainifest files选项上填写上修改后的mainifest文件路径。

4.重新编译工程后的test.exe就可以在xp上正常运行了。

本来想解释一番的。结果百度一下,发现早有人把这问题搞透彻了。我这里解释不清的让别人解释吧^_^

http://blog.csdn.net/xiaojianpitt/article/details/4269641

注:该帖子中的解决方案与我这里给出的不一样(一句话概括,他的解决办法是程序文件+mainfest文件+依赖库),我这里取巧了。有兴趣的人可以参考研究下。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值