概述
网上有人提到过这个问题,解决方法也大概就是拷贝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的机器上无法运行所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复