正文

vs兼容问题心得2007-11-15 17:37:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wfxsky/30928.html

分享到:

这两天有点焦头烂额,   我们这边运行的好好的程序,   到了测试的机器上就不能启动(是根本运行不了,   而不是运行出错),   弄得我异常郁闷。   经过了一番摸索,   发现和   winxp、win2003中为解决dll   hell而引入的manifest机制有关系。而以前我们用vs2003开发,   它并没有强制程序使用manifest,   但到了vs2005中,   这已经改成必需的了,   而我们并没有按照需要进行相关的配置,   所以程序启动不了了。   根据目前的经验,   vs2005编译的程序不能启动大致有两个原因,   下面简单介绍解决办法。
1、在开发组的机器上(安装有vs2005)有时都不能启动
这一般是项目的文件被放在了fat/fat32分区上导致的,   解决方法是把它们都移动到ntfs分区上,   或者把“项目属性 ¦Manifest   Tool ¦General ¦Use   FAT32   Work-around”设为yes。
2、开发组运行正常,   换到其它机器上就不行了
这一般就是系统dll(包括crt,mfc,atl等)没有正确配置导致的。   如果程序是release版,   那么很简单,   只要把“\SDK\v2。0\BootStrapper\Packages\vcredist_x86”下的 "vcredist_x86。exe "拷贝到目标机器上运行即可,   这是以x86平台为例的,   如果你用的是别的cpu平台(amd64或ia64)把x86替换成相应的内容就可以了。
如果是debug版,   就复杂一些了,   首先要确定你需要的dll的版本,   绝大多数(注意:不是 "所有 ")情况下它和编译器的版本相同,   通过vs2005的关于对话框就能看到,   如下图所示:


  确定版本后,   在开发组的机器上进入“%windir%\winsxs "文件夹(下面将以x86平台8.0.50727.762版本的debug   crt为例进行说明),   拷贝以下文件到目标机器的相同位置即可:  

x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f文件夹下的所有文件

Manifests文件夹下的x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f.cat和x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f.manifest

Policies\x86_policy.8.0.Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_x-ww_09e017b4文件夹下的8.0.50727.762.cat和   8.0.50727.762.policy

  注意,   上面的操作只是在目标操作系统为winxp,win2003及以上时才需要的,   如果是win2000及以下的系统,   只要把第一个文件夹下的文件拷贝到system32中就行了。

附:

msdn上有关vc应用程序部署的几片文章,   供参考

Troubleshooting   C/C++   Isolated   Applications   and   Side-by-side   Assemblies  
Deployment   Examples  
以下是与这个问题相关的一些系统提示信息,   为了让碰到这些问题的人更容易搜到这篇文章,   我把它们列在这里.
参照的汇编没有安装在系统上
应用程序要求的组件版本同另一个活动的组件有冲突。
系统无法执行指定的程序
ERROR_SXS_ASSEMBLY_NOT_FOUND
14003
0x800736B3
The   referenced   assembly   is   not   installed   on   your   system.  

阅读(2504) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册