vs2005编译的程序不能启动大致有两个原因
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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"拷贝到目标机器上运行即可.(解释一下——拷贝这个程序到目标机然后运行,像是装了一个什么东西。装完了以后再运行用平台开发出来的程序,如果还提示有什么DLL找不到,那就把开发机上相应的DLL拷贝出来,贴到用户机中相应的文件夹里面。比如一个MFC的什么DLL找不到,在开发机上搜索这个DLL,记住它的路径,然后按这个路径贴到用户机上。) 这是以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中就行了。
按作者的方法试了一下,把项目属性改成Release,重新生成解决方案。把文件拷贝到用户机,先运行一次,然后再运行自己的程序,就不再提示“The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log for more detail.” 而是提示某个MFC DLL没找到,这个就和XP系统下MFC程序安装就要运行的提示一样了,拷贝相应DLL到SYSTEM32,程序终于能在Vista下面顺利执行了。
本次生成程序用的平台是Visual Studio 2008,装了一下这个vcredit_86就可以了。根据文章VS2005也是这样。那对于
VS2003和更早的VC6.0可不可以也使用这个办法呢?根据用VC2003和VC6.0的程序在Vista下面测试的结果,答案是可以。方法也是类似的,先运行vcredist_x86.exe。这个程序是SDK带的程序,以目前的了解也许SDK版本至少要高于.NET 2.0才会有。SDK2.0有,SDK6.0有, SDK1.1没有。值得注意的一点:用系统搜索过这个文件搜索不到,但是自己到那个文件夹下面去找就能找到,所以如果没有搜索到的话一定要自己去SDK文件夹下面找一下。
有的根本就没有装.NET的SDK怎么办呢?也有办法!这个单独的vcredist_x86.exe文件可以在微软的下载中心下载到,东西是一样的,而且在微软下载到的还是最新的版本。