我是靠谱客的博主 鳗鱼火,最近开发中收集的这篇文章主要介绍visual studio 2008编译的C++程序在没安装redistribute包或vs的机器上无法运行,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

网上有人提到过这个问题,解决方法也大概就是拷贝Microsoft.VC90.CRT等几个文件夹到程序目录,但是有时候这样仍然不能解决问题,原因就在于程序的menifest文件里的版本号问题。

首先到Microsoft.VC90.CRT文件夹下看Microsoft.VC90.CRT.manifest文件中的版本号,是9.0.30729.4148,而程序的版本号未必是这个,实际上通过查看系统自动生成的manifest的文件(一般在Rlease/XXXX.exe.intermediate.manifest文件中),可以看到版本号是9.0.21022.8。

如果系统安装了高版本的crt,那么程序可以执行,如果系统没有安装,把高版本的crt拷贝到程序目录,它也不认,它只认它指定的版本,很变态。

解决办法有二,第一就是创建一个文件include.menifest,来替换系统自动生成的文件,使用新版本号,内容为:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
< assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.30729.4148' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
< /assembly>

注意红色部分,然后在项目属性页中的Linker->Menifest File中的Generate Menifest设置成No

然后再去Menifest Tool->Input and OutPut中的Additional Menifest File中填上刚才的文件include.menifest,同时设置Embedded menifest为YES。然后拷贝9030729的crt到程序目录。

第二种方法,和第一种方法想法,不去修改程序生成的menifest文件,而是使用9012022.8的crt,拷贝到程序目录即可。

这样问题将得到解决,客户机器不再需要安装vcredist.exe之类的东东,也不需要再做vc8的安装包了,要知道,这个安装包貌似不是很好用。

最后

以上就是鳗鱼火为你收集整理的visual studio 2008编译的C++程序在没安装redistribute包或vs的机器上无法运行的全部内容,希望文章能够帮你解决visual studio 2008编译的C++程序在没安装redistribute包或vs的机器上无法运行所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部