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的安装包了,要知道,这个安装包貌似不是很好用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值