如何在其他电脑上运行VS2005编译的DEBUG版应用程序
做项目的过程中,遇到这样的问题:在自己的电脑上用VS2005编译好的DEBUG版程序在其它的没有安装VS2005的电脑上没有办法运行,郁闷至极啊。
直 接拷贝文件后,错误信息如下:"This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.",大意就是程序由于配置错误导致启动失败,重新安装来解决这个问题。
原来用VC6或者VS2003没有出现过这样的错误信息啊,只是由于没有安装相应的IDE,可能出现找不到某些DLL的错误,按照错误提示把DLL考过来也就可以了,这个错误让人完全抓不到头脑。
尝试将程序编译成Use MFC in a static library还是出现同样的问题,很显然不是由于缺少什么DLL导致的。于是只能求救于搜索引擎,几番查找下来终于解决了问题。
首先,通过菜单找到关于选项查询当前VS2005的版本,然后到自己电脑"$(Windows)/WinSxS/"目录下可以看到很多长长 名字的目录。第一个"_"前为平台,这里以x86为例,接下来找到带有"Microsoft.VC80.DebugCRT" 和"Microsoft.VC80.DebugMFC"字样的且包含上面版本号的目录。我的电脑目录如下:
x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f x86_Microsoft.VC80.DebugMFC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_257740a4
将这两个目录拷贝到目标电脑的"$(Windows)/WinSxS/"位置,进入"$(Windows)/WinSxS/Manifests/"目录,用上面的方法找到四个文件并拷贝到目标电脑的相同目录中,我的电脑文件如下:
x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f.cat以及.manifest文件
x86_Microsoft.VC80.DebugMFC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_257740a4.cat以及.manifest文件
最后一步,进入"$(Windows)/WinSxS/Policies/"目录,找到带有"Microsoft.VC80.DebugCRT"和"Microsoft.VC80.DebugMFC"字样的两个目录将其拷贝到目标电脑的相同目录,我的电脑目录如下:
x86_policy.8.0.Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_x-ww_09e017b4
x86_policy.8.0.Microsoft.VC80.DebugMFC_1fc8b3b9a1e18e3b_x-ww_a193936f
到 此,所有需要的文件都拷贝结束了,运行刚刚的应用程序,显示了我们熟悉的错误信息:"This application has failed to start because XXX.dll was not found. Re-installing the application may fix this problem."
按照提示,将需要的DLL拷贝到"$(Windows)/System32/"目录下,我的这次实验中需要拷贝 "msvcp71d.dll"和"msvcr71d.dll"(如果你的程序不需要,就不用复制了)。这样就可以顺利的运行DEBUG的程序了。
顺便提一下,在VS2005中,默认的会给每一个应用程序编译生成一个"应用名.exe.manifest"文件,打开来看,可以发现跟我们上面拷贝的文件以及目录名称有些相近的地方,如:
我们要拷贝的 文件命就是这样的组合:processorArchitecture_name_publicKeyToken_version_...,所以如果在拷贝 上诉文件以及目录之后仍旧无法运行的,可以看看manifest文件里面是不是还依赖了其它目录,如法炮制应该就可以了。
另外,在寻找解决办法的过程中看到有人提到release版的问题,解决方法则方便的多:
第一种:拷贝"$(Microsoft Visual Studio 8)/SDK/v2.0/BootStrapper/Packages/vcredist_x86/vcredist_x86.exe"(微软有这个补丁提供,但是我试过后,不重启的话不行,不知道重启以后行不行)到目标电脑执行即可。如果你的程序无法运行,可以试一下。
注:2008年2月20日遇到一台电脑无法运行Release版程序,如上所说运行"vcredist_x86.exe",确实可以。
第二种: 拷贝“$(Microsoft Visual Studio 8)/VC/redist/x86/Microsoft.VC80.CRT”文件夹到目标电脑可执行文件的文件夹下即可。(我试过,OK,只是每个可执行文件都要一份,太麻烦)
当然,这都不是正统方法,正统的方法是做安装包,到目标机器上安装才是正道。
如何在其他电脑上运行VS2005编译的DEBUG版应用程序的更多相关文章
- 关于C++编译的程序无法在新一台电脑上运行总结
最近在调用一个SDK调试一个主板的DPIO. 可是编译好的程序在开发电脑上运行没问题,到了新主板建立的电脑系统上就出问题. 总结了下要注意一下几方面. 1:程序本身要没有问题.至少在开发电脑系统环境下 ...
- 让opencv程序在没有安装opencv的电脑上运行
经常需要把用opencv写的程序拿到没有装opencv的电脑上去运行和演示,要让opencv程序脱离opencv环境,一般有两种方法: 一种是动态链接opencv,即把相应的dll拷贝到exe所在目录 ...
- 在一台电脑上运行两个或多个tomcat
在一台电脑上运行多个tomcat 在本例中,使用两个tomcat做示例 工具/原料 tomcat 安装好jdk,并且配置好环境变量 方法/步骤 首先去apache下载一个tomcat, ...
- win10应用开发——如何判断应用是在手机上运行还是电脑上运行
原文:win10应用开发--如何判断应用是在手机上运行还是电脑上运行 在进行uwp应用开发的时候, 有时我们需要知道自己的应用是在手机端运行还是在桌面端运行,那么通过以下的api就可以进行判断: Wi ...
- VS2008生成的程序无法在其它电脑上运行,提示系统无法执行指定的程序
经过一番查找,最给力的参考是 http://www.cnblogs.com/visoeclipse/archive/2010/02/27/1674866.html ------------------ ...
- 史上最详细版!java文件打包成exe,在未配置安装JDK和未配置的电脑上运行--转载
原文地址:http://funine.iteye.com/blog/2220359 (本文所有素材将在文章最后附上) 准备工具exe4j, converticon.com(用于制做.ico格式的图片) ...
- 使用 VirtualBox 虚拟机在电脑上运行 Android 4.0 系统,让电脑瞬间变安卓平板
Ref: http://www.iplaysoft.com/android-v4-ics-for-virtualbox.html 随着 Android 手机的各种软件应用越来越多,很多没有购买的朋友都 ...
- 如何生成能在没有安装opencv库及vs2010环境的电脑上运行的exe文件
项目基本算法已经完成,甲方需要一个可以运行的demo.目前,程序能在自己的电脑上正常运行.移植到其他win7系统上,运行失败. 寻找各种解决办法,baidu找到两个办法: 1.使用静态链接的方法,这种 ...
- vs2012编译在win7 32位电脑和win xp电脑上运行的win32程序遇到的问题记录
一.win7 32位电脑: vs2012编译的64位程序是没有问题的.但编译的32位程序在别的电脑(虚拟机模拟)出错: 感觉很无语,vs这么牛逼的东西,在设计时候都不考虑这些吗? 在自己电脑C:\Wi ...
随机推荐
- 【Unity3D基础教程】给初学者看的Unity教程(一):GameObject,Compoent,Time,Input,Physics
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点推荐.谢谢! Unity3D重要模块的类图 最近刚刚完成了一 ...
- mac osx 快捷键符号以及意义 触发角:锁屏
快捷键中常用符号⌘(command).⌥(option).⇧(shift).⇪(caps lock).⌃(control).↩(return).⌅(enter). OSX快捷键 快捷键中常用符号 ⌘( ...
- ES(一): 架构及原理
Elasticsearch 是一个兼有搜索引擎和NoSQL数据库功能的开源系统,基于Java/Lucene构建,可以用于全文搜索,结构化搜索以及近实时分析.可以说Lucene是当今最先进,最高效的全功 ...
- Provisional, Temporary 和Interim 的区别
1 Provisional adj. 临时的.暂时的.暂定的:n. 临时邮票 强调在一定时期内暂时的.双方同意的但还不是最终确定的决定或者条约等. Such as例如: Provisional go ...
- 单例模式中的多线程分析synchronized
谈到单例模式,我们立马会想到饿汉式和懒汉式加载,所谓饿汉式就是在创建类时就创建好了实例,懒汉式在获取实例时才去创建实例,即延迟加载. 饿汉式: 1 package com.bijian.study; ...
- 【巩固】JS获取时间的一些基础知识
就是一个new Date()对象,要注意的有以下几点; 直接给oDate对象设置年月日时分秒的时候要分成两步,oDate.setFullYear()接受三个参数分别是年月日,注意月份是从0开始计一月的 ...
- PHPMyAdmin 显示缺mysqli 扩展的解决方法
今天在学PHP100视频教程时,装了phpMyAdmin.一开始下载的是最新版本phpMyAdmin-4.1.4-all-languages, 直接500错误,页面怎么也打不开.我用的PHP版本是老版 ...
- dedecms代码研究五
上一次留几个疑问: 1)DedeTagParse类LoadTemplet方法. 2)MakeOneTag到底在搞什么. 从DedeTagParse开始前面,我们一直在dedecms的外围,被各种全局变 ...
- Qlikview 处理交叉表数据
数据来源于crossTable的时候,如何将数据做明细显示. 如图示交叉表数据 使用表格向导,选择交叉表按钮, 结果达到目的. 相关脚本. Month, 表示将要新加的字段的列明,Orders 为明细 ...
- 41. 这张表lbdeveloplog可以查看各个对象的提交情况,包括是哪个IP提交的
lbdeveloplog 这张表lbdeveloplog可以查看各个对象的提交情况,包括是哪个IP提交的