VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题
Vs2008运行中经常出现的问题汇总版
Vs2008运行中经常出现的问题汇总版1.问题:test.exe 中的 0x 1026f689 (msvcr90d.dll) 处未处理的异常:0xC0000005: 写入位置 0xcccccccc 时发生访问冲突。
答:访问冲突一般都是空指针或是野指针造成的,可能是指针数组或者字符指针未初始化就使用,或者没有给多维指针分配动态内存。
例如:使用filename_array[i]之前就一定要对filename_array[i]分配内存,作初始化;char* filename_array[2000];for (nnCount=0;nnCount<fileMAXLEN;nnCount++){filename_array[nnCount]=new char[256];memset(filename_array[nnCount], 0, 256 );}。
strcpy( filename_array[nnCount],data.cFileName );2.问题:设置了断点,但是程序运行时直接忽视了断点,直接执行完毕。
答:程序分为debug版和release版,release版一般是发布版不支持断点调试,debug版可以分步调试。
3.问题:fwrite与fprintf有些什么区别?答:fwrite一次写入一个数据块,以字节为基本的操作单元。
一般用记事本打开的时候,看到的是乱码,因为他是二进制存储方式所以看到的时候乱码。
只用我们用UltraEdit32编辑器打开,就可以开导其数据了(十六进制显示的数值)。
4.问题:mt.exe : general error c101008a: Failed to save the updated manifest tothe file ".\Debug\FlameDetect.exe.embed.manifest". Bpcn答:这个问题经常出现!其实并不是你的程序真正出现了什么问题,只是你的编译链接的时候编译器自身的问题而已!也许是VS2005 ,VS2008 的BUG吧,解决的方法:点class view中的工程,选右鍵,再点clean就可以了;或者是build->clean solusion也可以。
应用程序配置不正确或初始化失败
与VC6不同, VC2003、VC2005、VC2008及其后续版本,引入了manifest清单的概念,即应用程序编译后会同时生成对应的.manifest文件,并将该.manifest文件作为资源编译到dll或者exe中去。
manifest文件实际上是一个XML格式的文本文件,里面记录了dll或exe中要引用的CRT、MFC、ATL库的版本和名称。
VC6编译的应用程序对CRT、MFC、ATL的dll都是直接调用,而VC2003、VC2005、VC2008编译的程序都是先查询编译到资源中的manifest中的记录,然后按照记录提供的版本和名称去搜寻对应的CRT、MFC、ATL库,搜索路径为环境变量中定义的路径,若搜索到的文件版本号不匹配,则不会调用,从而导致应用程序配置不正确,程序无法启动或初始化失败等错误(相关信息可以在电脑日志中查看得知)。
DLL的版本信息可以使用HA-eXeScope650-moming.exe软件查看,如下图所示(红色框内既为版本号):至于你系统内的版本号,可以到VS安装目录下的查看,本文以VS2008 CRT库为例:可以看到,其版本号均为9.0.30729.4148,于上面DLL的一致,故不会存在问题VS2008的使用库目前为止分为三个版本:●没有打过任何补丁的VS2008该版本对应的CRT/MFC/ATL库的版本号为9.0.21022.8。
●2、打过SP1补丁的VS2008和KB973675补丁打过该补丁后,系统中存在着两个版本的CRT/MFC/ATL库,版本号分别为9.0.21022.8和9.0.30729.1,这导致了manifest文件中记录的版本号和实际库的版本号不一致(程序要求它们的版本号一致才能运行)。
这时需要在工程设置中增加一个宏定义_BIND_TO_CURRENT_VCLIBS_VERSION,该宏定义于C:\Program Files\Microsoft Visual Studio 9.0\VC\include\crtassem.h文件中,然后重新编译程序。
vs2008 解决方案
vs2008 解决方案
《VS2008 解决方案:提高编程效率的利器》
Visual Studio 2008 (以下简称VS2008)是微软推出的一款集成
开发环境,为开发人员提供了丰富的工具和功能,以便于更高效地进行软件开发。
然而,有时候在使用VS2008的过程中可
能会遇到一些问题,这就需要寻找相应的解决方案来解决这些问题。
首先,当我们遇到VS2008出现异常或者运行缓慢的情况时,
可以尝试进行一些基本的操作。
比如,可以清理解决方案并重新生成项目,有时候这能够解决一些由于缓存等原因导致的问题。
另外,也可以尝试升级VS2008到较新的版本,以获得更
好的性能和稳定性。
其次,对于一些特定的错误或者bug,我们也可以通过查找相
关的解决方案来解决。
这通常可以通过查阅官方文档、搜索网络论坛或者咨询其他开发者来获得帮助。
有时候,甚至可以通过修改一些设置或者添加一些插件来解决一些问题。
此外,还可以考虑使用一些第三方工具或者插件来增强
VS2008的功能。
比如,可以使用一些代码优化工具来提高编
程效率,或者使用一些调试工具来解决一些难以调试的问题。
这些工具和插件通常能够为我们提供更好的开发体验。
总的来说,VS2008是一个非常强大的开发工具,但是在使用
过程中也可能会遇到一些问题。
我们可以通过一些基本的操作、
查找相关的解决方案、使用第三方工具等方式来解决这些问题,从而提高我们的编程效率。
希望以上提到的方法能够帮助大家更好地使用VS2008,获得更好的开发体验。
应用程序错误解决方法
应用程序错误解决方法开始-->运行-->输入cmd 回车在命令提示符下输入(粘贴以下字符)for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1回车(在此不要动键盘和鼠标,约闪3--5分钟)直到闪完了再做别的。
以后就没有错误框了。
此法不成功试这个for %1 in (%windir%\system32\*.ocx) do regsvr32/s %1(成功率%80)如出现(此时不应有doregsvr32.exe)不能操作请在此前:开始-->运行-->输入regsvr32actxprxy.dll 回车;再接着依次运行以下命令:regsvr32 shdocvw.dll regsvr32 oleaut32.dll regsvr32 actxprxy.dll regsvr32 mshtml.dll regsvr32 msjava.dll regsvr32 browseui.dll regsvr32 urlmon.dll 回车。
如出现(不是内部或外部命令,也不是可运行或批处理文件)我的电脑属性-->高级-->环境变量-->在系统变量里找到path-->编辑-->看默认值是不是这个(%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\S ystem32\Wbem )若还不行就将( ;%systemroot%\system32;%systemroot% )加到最后即可。
【具体原理如下】:X000000该内存不能为read written的解决方法出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。
一:先说说硬件:一般来说,电脑硬件是很不容易坏的。
内存出现问题的可能性并不大(除非你的内存真的是杂牌的一塌徒地),主要方面是:1。
内存条坏了(二手内存情况居多)、2。
Microsoft Visual C++ 2008 发布程序的部署问题
Microsoft Visual C++ 2008 发布程序的部署问题VS2008编译的程序在Windows2008环境上运行时经常出现如下问题:应用程序事件日志如下:上述两个问题都解决后则可能还出现如下问题:注意:此时是调用dll出现问题了,而不是运行主程序出错。
主要问题是“找不到从属程序集Microsoft.VC90.MFC”,解决办法如下:将整个“C:\Application\Microsoft Visual Studio 9.0\VC\ redist\x86\Microsoft.VC90.MFC”拷贝到exe文件所在目录下,如果exe程序所涉及调用的dll与该exe文件不在同一目录,那么须要在dll所在目录也拷贝一份。
详细描述如下:这个问题有好多Blog和Forum已经讨论过了,但都不详尽,在具体的操作过程中还是有许多疑问。
我摘录并整合了许多网络文章,希望能够做个最终了结。
一、VC2005和VC2008编译出来的程序如何发布/lf426/archive/2008/04/12/46885.aspxVC2005和VC2008编译出来的程序放到别人的电脑上为什么有可能无法运行呢?1:Microsoft Visual C++ 2008 Express Edition可以发布软件吗?能!很多人说,因为是Express版,不是Studio,所以只是用来练习语言的,不能发布软件——错!除了没有MFC和ATL,基本上跟 .net 版本是一样的。
发布出来的,是完整的可执行文件。
2:VC 2008 (2005) 发布出来的程序必须附带上他们特定的dll文件吗?不一定。
如果目标系统是个经常升级的系统,微软已经为其打上了所需要的dll文件补丁了,不需要在软件包里面附加特定的dll文件。
特别在Vista系统中,你更是不需要VC8和VC9的dll文件。
但是在一些老版本的系统中,这些文件就是必须的。
3:VC2008和VC2005特定的dll文件是哪些?VC8: msvcm80.dll, msvcp80.dll, msvcr80.dllVC9: msvcm90.dll, msvcp90.dll, msvcr90.dll4:如何部署文件?首先,请选择release版本;在生成可执行文件(exe文件)的时候,会得到相应的部署文件(manifest文件)。
应用程序错误问题怎么解决
应用程序错误问题怎么解决我们下载或者使用某些应用程序时候,提示应用程序错误,无法正常使用,什么情况?出现这样问题,怎么办?下面就和大家介绍一下如何解决电脑出现应用程序错误的问题如何解决电脑出现应用程序错误的问题?具体步骤如下:1、首先排除病毒原因,使用最新版本的金山毒霸快速查杀3-5分钟,根据检查结果,点击立即处理。
2、如果应用程序出错的提示是缺少某个文件,那就可能是这个文件损坏,根据这个组件查询是哪个系统组件损坏,重新安装相关组件,恢复程序文件,一般即可解决。
3、若是相关软件自身的组件缺失,只需要重新安装这个软件即可。
比如运行迅雷时提示缺少某个文件,可以尝试重新安装迅雷。
4、若以上方法无效,可能是软件之间的冲突导致出错。
解决办法是尝试关闭几个无关的正在运行的应用程序,看看错误是否还会重现。
若已解决,就知道是哪两个软件冲突,不再同时运行这两个软件即可解决。
或者向厂商反馈故障,督促厂商升级解决。
如果不清楚是哪几个软件冲突,可行的解决办法是使用金山卫士的系统优化,在一键优化里,关闭一些不常用的软件启动。
这样开机后运行的程序少一些,冲突的概率会下降。
5、对于另一种应用程序出错,截图显示“应用程序出错,**内存地址不能读或不能写”,这种情况最复杂,若以上方法不能解决,则很可能是硬件(主要是内存)故障,可能是兼容性不良,只能联系硬件供应商修理。
或者重装系统,重装后短时间内可能会有效。
相关阅读:BIOS故障分析大全1.CMOS battery failed中文:CMOS电池失效。
解释:这说明CMOS电池已经快没电了,只要更换新的电池即可。
2.CMOS check sum error-Defaults loaded中文:CMOS执行全部检查时发现错误,要载入系统预设值。
解释:一般来说出现这句话都是说电池快没电了,可以先换个电池试试,如果问题还是没有解决,那么说明CMOS RAM可能有问题,如果没过一年就到经销商处换一块主板,过了一年就让经销商送回生产厂家修一下吧!3.Press ESC to skip memory test中文:正在进行内存检查,可按ESC键跳过。
应用程序无法启动,因为应用程序的并行配置不正确
应用程序无法启动,因为应用程序的并行配置不正确。
请参阅应用程序事件日志,或使用命令行sxstrace.exe工具
方法一:
开始- 运行(输入services.msc)- 确定或回车,打开:服务(本地);
我们在服务(本地)窗口找到:Windows Modules Installer服务,查看是否被禁用;
如果Windows Modules Installer服务被禁用,我们必须把它更改为启用- 手动,重启计算机,再安装应用程序。
方法二:如果还是出现上述错误,那就是我们的系统缺少Microsoft Visual C++ 20XX(运行库)文件。
步骤:
打开百度搜索,输入Microsoft Visual C++ 20XX(运行库),再点击:百度一下;
找到:Microsoft Visual C++ 20XX(运行库)下载网址,下载并安装:Microsoft Visual C++ 20XX(运行库);
Microsoft Visual C++ 20XX(运行库)(XX表示:05、08、10)安装完成后,重启计算机,再安装应用程序。
方法三:还有,如果你安装的Microsoft Visual C++ 20XX(运行库) 安装的版本安装多了或者安装顺序不对,同样也会造成“应用程序无法启动,因为应用程序的并行配置不正确”,
解决步骤:将c++2005,c++2008,c++2010全部卸掉,再重新安装。
应用程序无法启动,因为应用程序的并行配置不正确
应用程序无法启动,因为应用程序的并行配置不正确。
请参阅应用程序事件日志,或使用命令行sxstrace.exe工具
方法一:
开始- 运行(输入services.msc)- 确定或回车,打开:服务(本地);
我们在服务(本地)窗口找到:Windows Modules Installer服务,查看是否被禁用;
如果Windows Modules Installer服务被禁用,我们必须把它更改为启用- 手动,重启计算机,再安装应用程序。
方法二:如果还是出现上述错误,那就是我们的系统缺少Microsoft Visual C++ 20XX(运行库)文件。
步骤:
打开百度搜索,输入Microsoft Visual C++ 20XX(运行库),再点击:百度一下;
找到:Microsoft Visual C++ 20XX(运行库)下载网址,下载并安装:Microsoft Visual C++ 20XX(运行库);
Microsoft Visual C++ 20XX(运行库)(XX表示:05、08、10)安装完成后,重启计算机,再安装应用程序。
方法三:还有,如果你安装的Microsoft Visual C++ 20XX(运行库) 安装的版本安装多了或者安装顺序不对,同样也会造成“应用程序无法启动,因为应用程序的并行配置不正确”,
解决步骤:将c++2005,c++2008,c++2010全部卸掉,再重新安装。
VS2008 按F5调试运行报无法启动程序错误解决方案
VS2008 按F5调试运行报无法启动程序错误解决方案这两天遇到个问题,调试vs2008里面的项目时,弹出了个无法启动程序的对话框,开始以为是36 0和程序冲突的原因,把360都关闭后仍无起作用;也在解决方案里面设置启动项,但是仍没起作用,后来,请教了一位师兄,使用了他提供的方法才能使程序运行起来!真是太妙了!问题描述:VS2008 按F5调试运行IE报Microsoft Visual Studio无法启动程序“http://localhost:788 7/Login.aspx”错误,如下图所示。
直接右键“在浏览器中查看”正常,就是不能调试,一调试就报错,甚是郁闷。
解决方案:按照一下步骤处理1)在开始菜单的运行里面输入“regedit”命令,打开“注册表编辑器”2)在注册表中找到“我的电脑/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Internet Explorer/MAIN”目录,右键点击MAIN,找到“新建 DWORD值(D)”,新建一个名为TabProcGrowth 值为0的项。
3)完了以后测试一下,如果没问题就OK了。
有时候修改以后可能仍会出现Microsoft Visual Studio无法启动程序“http://localhost:7887/Logi n.aspx 找不到元素问题,如下图所示:解决这个问题只需要刷新一下注册表即可。
有两种方式可以选择:方式一:重启计算机方式二:同时按下一下三个键Ctrl+Alter+Del,会弹出Windows任务管理器,在进程选项卡中找到explorer.exe,把该进程结束掉,然后在应用程序选项卡中点击“新任务(N)…”,在弹出的新建任务窗口中输入explorer.exe,确定即可。
其原理就是重启一下explorer进程,以达到刷新注册表的目的。
到这里问题就能得到解决了,第一个解决方法本人已测试通过,暂时还没遇到第二个s问题。
电脑出现应用程序错误如何解决
电脑出现应用程序错误如何解决
电脑出现应用程序错误如何解决
导语:电脑经常出现应用程序错误怎么办?有什么好的解决办法呢?下面就来看看小编为大家整理的'电脑资料,希望对您有所帮助!
方法/步骤
1
当某一应用程序在运行时报错,可采用重新安装程序的方法来尝试解决问题。
小编在此建议一种合理的重装的方法,就是先完全卸载原来的程序,再运行安装程序进行重装。
2
如果重新安装应用程序的方法无法解决遇到的方法,则我们可以采用 regsvr32命令将动态链接库文件重新注册一下。
具体操作方法:打开“运行”对话框,输入命令“CMD”进入MSDOS界面。
3
将以下代码复制到命令窗口中并运行。
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1 代码运行完成后,重启一下电脑。
再尝试运行程序。
4
如果电脑在运行程序时多次出现“应用程序错误”的提示,建议重新安装一下操作系统。
5
如果以上方法还是无法解决问题,则及有可能是电脑内存出现故
障,建议更换内存内。
小编的电脑在出现以上问题后,后来更换了一条内存就解决问题了。
由于应用程序配置不正确 应用程序未能启动
由于应用程序配置不正确应用程序未能启动引言在使用计算机上的应用程序时,偶尔会遇到应用程序配置不正确的问题,导致应用程序无法启动。
这种问题可能由多种原因引起,如错误的配置文件、损坏的程序文件等。
本文将讨论这些可能的原因,并提供相应的解决方案,帮助用户解决应用程序启动问题。
1.检查配置文件配置文件是应用程序启动时读取的重要文件,其中包含了应用程序所需的各种参数和设置。
如果配置文件中存在错误或缺失,则可能导致应用程序无法正常启动。
解决方案:首先,需要确认配置文件是否存在,并且位置正确。
然后,可以尝试打开配置文件,检查其中的参数设置是否正确。
如果发现错误,可以手动修改配置文件中的参数,确保其与应用程序的要求一致。
2.修复损坏的程序文件在一些情况下,应用程序的某些关键文件可能会损坏,导致应用程序无法启动。
解决方案:可以尝试重新安装应用程序,以替换损坏的文件。
首先,需要卸载当前安装的应用程序。
然后,从官方网站下载最新的安装程序,并按照提示进行安装。
新安装的应用程序应该包含完整的和正确的程序文件,从而能够正常启动。
3.检查依赖项应用程序可能依赖于其他组件或库文件。
如果缺少必要的依赖项,应用程序可能无法启动。
解决方案:可以尝试安装或更新缺少的依赖项。
首先,需要确定应用程序所需的依赖项及其版本要求。
然后,可以从官方网站或其他可靠来源获取所需的依赖项,并按照其提供的安装指南进行安装。
安装完依赖项后,可以尝试重新启动应用程序。
4.检查系统环境变量应用程序在启动时可能会读取系统环境变量。
如果环境变量设置不正确,应用程序可能无法找到所需的资源或执行所需的操作。
解决方案:可以检查系统环境变量,并确保其设置正确。
在Windows系统中,可以通过控制面板 -> 系统 -> 高级系统设置 -> 环境变量来访问系统环境变量设置。
在Linux系统中,可以编辑/etc/environment文件进行设置。
在设置环境变量时,务必确保变量名和值的正确性,以避免应用程序启动问题。
visual studio 附加到进程不能命中断点的解决办法
当前不会命中断点。
源代码与原始版本不同”的问题的有效解决办法开发时有一个工程的一个文件的断点无效,VS 2005提示说当前不会命中断点。
源代码与原始版本不同,请在断点选项里设置允许源代码与原始版本不同。
这个是针对单个断点进行设置。
如果要对所有的断点进行设置,则要在“工具”——〉“选项”——〉“调试”——〉“要求源文件与原始版本完成匹配”去掉勾。
实际上有比这个办法更好的办法,就是将出问题的文件用notepad打开,然后另存为Unicode编码,覆盖原来的文件。
网上另外有一种办法是:通过重新格式化出问题的源文件亦可以解决,即在VS2005中选择“编辑”——〉“高级”——〉“设置选定内容的格式”。
二当前不会命中断点,源代码与原始版本不同,解决办法今天是端午,估计是加班的原因,VS2008给我开了个玩笑.提示:当前不会命中断点。
源代码与原始版本不同.为什么会出现呢?原因当前大家都清楚,就是因为编译器生成的符号文件与源代码不同.那我的代码明明已经改变并存档,并且编译了,为什么还是不同呢?1.我想也许是没有被真正的重新生成吧,这好办,清理解决方案,清理工程,为了更彻底,再关闭解决方案,把debug删掉,ncb文件删掉,再打开重新生成.有时候这样问题就解决了,但是我发现问题依旧,还得再想办法..2.我又想,我的解决方案中有是不是有几个工程呢?如果有几个工程,在其它工程中代码改变了却没有重新生成,如果这个时候下断,当前调用的模块(dll,exe)等就会出现与代码不一致了.但是我一看才知道记错了,我这个解决方案里只有一个工程的,也没有调用其它模块,就只有一个对话框而以.....再想.3.即然VS不认为这个文件改变了,那我直接给他换个新的行吗?我果断改掉了这个不能下断的.cpp的文件名和对应.h的文件名,并且再改掉所有调用到.h的地方(.h文件名变了当然得改).编译,调试运行,下断,终于是好了,可以下断,没有提示了.....但是.....这种方法也太不方便了吧,一个大点的工程,如果不能下断的刚好是一个常用的类,那不得累死啊...再想.4.也想不出什么了,网上看看吧.好多方法啊...(代码文本格式问题)前两种方法都有说,还有就是去掉代码一致性检查 ...我想这种方法不是我想要的,只是掩饰问题罢了,不是解决问题之道.还有说"编辑"-->"高级"-->"格式化选定内容"(也就是选中文本,然后按ctrl+K,ctrl+F),不过试了不管用,不过即然别人说了,肯定某种情况下是能解决问题的.还有说可能是代码行过长,或者加了什么特殊字符的原因.还有说用记事本重打开不能下断的文件,再另存为UNICODE编码的文件.感觉估计是还有此道理,MS也不一定能考虑的万无一失,有可能编译器处理文本时会有点问题,并且我的代码里确实有几行代码较长,却没的换行.先改吧,为了一次搞定这个可能的格式问题,单行过长问题改完后,再用记事本另存成unicode编码的.保存编译.......过了不长的时间,F5调试运行,再去下断,我的那个神啊.........终于能下正常断点了,不再提示了.....总结:虽然问题是解决了,但是我还是没有想出过所以然来...虽说是通过代码的格式,编码格式改变来解决了这个问题,但是真的是格式问题吗?好像不是吧....如果格式有问题,那么我第3种方法只改文件名不应该能解决问题,因为代码文本格式没有变化啊..如果不是格式问题,但是能过改代码格式和编码方式,问题却解决了......最终结论: 不认真的,不仔细,不为用户着想的MS啊,愿你早日破碎虚空,离开这个世界吧.(这个问题在VC中就有的吧,现在都到VS2010了竟然还没有解决,难道是MS没有能力?我相信其能力,只是MS真的不够用心)三以前在工作的时候,遇到过提示“当前不会命中断点。
VS2008由于应用程序配置不正确,应用程序未能启动
VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题VC9编译的程序在没有装过VC9(确切的说是.Net Framework3.5)的机器上运行时,如果提示“由于应用程序配置不正确,应用程序未能启动。
重新安装应用程序可能会纠正这个问题。
”这个错误,那么就说明该程序动态链接了VC9的运行时库,(如果还用到了MFC,那么可能动态链接了VC9的MFC库,同理还有ATL 库),以及缺少对应的manifest文件,程序在目标机器上没有找到这些库和配置文件,因此导致了这个错误。
出现这种情况的VC9编译器可能存在3个版本,接下来分别阐明:1、没有打过任何补丁的VS2008该版本对应的CRT/MFC/ATL库的版本号为9.0.21022.8,这个版本号在后面会用到。
这个版本的程序部署比较简单,直接把VC安装目录下的redist目录(C:\Program Files\Microsoft Visual Studio 9.0\VC\redist)中需要的库以及对应的manifest文件拷贝到执行程序同目录下,这样程序到任何机器上都能够正常运行了。
2、打过SP1补丁的VS2008打过该补丁后,系统中存在着两个版本的CRT/MFC/ATL库,版本号分别为9.0.21022.8和9.0.30729.1,这导致了manifest文件中记录的版本号和实际库的版本号不一致(程序要求它们的版本号一致才能运行)。
这个版本的程序部署需要两个步骤,首先要使manifest文件中依赖项的版本号与实际库的版本号一致,均为9.0.30729.1,方法是在工程设置中增加一个宏定义_BIND_TO_CURRENT_VCLIBS_VERSION,该宏定义于C:\Program Files\Microsoft Visual Studio 9.0\VC\include\crtassem.h文件中,然后重新编译程序。
如何把VS2008上编的debug、release程序在没装VS的xp机器上运行
如何把VS2008上编的debug、release程序在没装VS的xp机器上运行用VS2008 SP编写的MFC程序,拷贝到其他没装VS2008的机器上直接运行,肯定是不行的。
即使选择静态链接MFC,有时候系统还是会提示“应用程序配置不正确”。
这是因为程序中可能不止用到了9.0版本MFC,还可能有ATL、CRT、OPENMP等。
在自己的机器上运行时,系统会到"C:\WINDOWS\WinSxS\"文件夹查找相应的库,这个文件夹里包含了所有安装过的版本的运行库和清单文件。
如果只找9.0版本的库和清单文件,也可以到"C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86"这个文件夹。
对于只用到Release库程序:拷贝需要的库和清单文件到exe所在目录,修改程序的清单文件,再移植就可以运行了。
修改的方法是:用Release方式编译链接程序,然后修改xxx.exe.intermediate.manifest,将其中name为Microsoft.VC90.CRT、Microsoft.VC90.MFC等的dependency块删掉,生成(不是重新生成!)项目,VS会把清单文件重新嵌入到程序中。
这样,到了目标机器上,系统就不会按照清单文件到WinSxS文件夹去查找库(当它找不到时,就会提示“配置错误”。
从“事件查看器”中,会看到加载失败的信息),而是到了该加载时才从工作目录查找。
网上很多说法都提到了拷贝dll和manifest,但如果不修改程序中嵌入的manifest的话,拷贝了也是没用的。
另外一个不需要修改清单文件的办法,是下载Microsoft Visual C++ 2008 Redistributable Package,只有几兆,到目标机器上安装就可以了。
这是vcredist_x86 for VS2008 的下载地址:/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f 2bc1bf&displaylang=en这是vcredist_x86 for VS2008 SP1的下载地址:/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B 2AF5FC2&displaylang=en两个安装程序的版本略有差别。
VS2008 按F5调试运行报无法启动程序错误解决方案
VS2008 按F5调试运行报无法启动程序错误解决方案这两天遇到个问题,调试vs2008里面的项目时,弹出了个无法启动程序的对话框,开始以为是36 0和程序冲突的原因,把360都关闭后仍无起作用;也在解决方案里面设置启动项,但是仍没起作用,后来,请教了一位师兄,使用了他提供的方法才能使程序运行起来!真是太妙了!问题描述:VS2008 按F5调试运行IE报Microsoft Visual Studio无法启动程序“http://localhost:788 7/Login.aspx”错误,如下图所示。
直接右键“在浏览器中查看”正常,就是不能调试,一调试就报错,甚是郁闷。
解决方案:按照一下步骤处理1)在开始菜单的运行里面输入“regedit”命令,打开“注册表编辑器”2)在注册表中找到“我的电脑/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Internet Explorer/MAIN”目录,右键点击MAIN,找到“新建 DWORD值(D)”,新建一个名为TabProcGrowth 值为0的项。
3)完了以后测试一下,如果没问题就OK了。
有时候修改以后可能仍会出现Microsoft Visual Studio无法启动程序“http://localhost:7887/Logi n.aspx 找不到元素问题,如下图所示:解决这个问题只需要刷新一下注册表即可。
有两种方式可以选择:方式一:重启计算机方式二:同时按下一下三个键Ctrl+Alter+Del,会弹出Windows任务管理器,在进程选项卡中找到explorer.exe,把该进程结束掉,然后在应用程序选项卡中点击“新任务(N)…”,在弹出的新建任务窗口中输入explorer.exe,确定即可。
其原理就是重启一下explorer进程,以达到刷新注册表的目的。
到这里问题就能得到解决了,第一个解决方法本人已测试通过,暂时还没遇到第二个s问题。
应用程序配置不正确的解决办法
由于应用程序配置不正确"的解决办法报出“由于应用程序配置不正确,应用程序未能启动。
重新安装应用程序可能会纠正这个问题”。
如下图:图1 某程序报错原因分析综合互联网上的资料,绝大部分是以下两种原因:1.该问题的原因之一:您的计算机的Windows Installer服务没有开启。
其解决方法是打开控制面板→管理→服务,将Windows Installer服务开启,并设为自动,再重启电脑。
2.该问题的原因之二:您的计算机上没有安装Visual Studio的运行库。
该应用程序是Visual Studio 2005及其以上版本开发的,其依赖于相应的运行库,而您的电脑上没有安装该运行库。
(对于VC6或VS2003开发的应用程序,如果缺少库文件,是会提示缺少“**.dll”,但VS2005或VS2008的却只提示“由于应用程序配置不正确……”。
)其解决方法不是重装应用程序,更不是重装系统,而是安装相应的运行库(Microsoft Visual C++ 20** Redistributable Package,即vcredist_x86.exe。
★区分您的程序是VS的哪个版本开发的确实有点困难,甚至有些软件是多个版本开发的,那就多种vcredist_x86.exe都装上,它们互相兼容,就能解决您计算机上大多数软件的同类问题了。
(2005和2008的都装上后“添加/删除程序”会显示如图5)。
★以下以“20**”代表“2005”或“2008”或“2009”或“2010”。
所需安装包∙仅需一个文件——微软官网下载中心下载的vcredist_x86.exe∙图2步骤1.打开控制面板→管理工具→服务,如果Windows Installer服务没有开启,则设其为自动,再重启电脑。
如果没有解决问题则继续。
2.可以初步判断您的程序是VS的哪个版本开发的。
(打开应用程序所在目录,搜索是否有mfc或msvc开头的文件,如果有,请查看其文件版本可知VC的版本。
VC2008编译选项和编译库
VC2008中影响exe大小和速度的全部编译选项今天介绍VC中的编译器选项,全面介绍不需要,MSDN里从头到尾都介绍完了,今天我只讲对生成的exe文件大小和速度有影响的。
用VC就得用IDE,我也以IDE的工程设置里面的排列顺序介绍,某些选项需要自己手动添加的最后介绍,我后面说的默认值是release的,debug版本一般不需要调选项。
项目- 属性- 配置属性- C/C++,这是编译器选项。
优化:通常,算法程序选择最大化速度(/O2),界面程序选择最小化大小(/O1),可以获得最佳的效果。
优选大小或速度,只有在使用完全优化(/Ox)时才有效,完全优化一般不推荐使用,用处就是可以生成速度与/O2基本相当,但是体积更小的代码(选速度优先的话)。
其他几个选项实际上已包含在/O1、/O2之中,具体请看MSDN。
代码生成:启用字符串池(/GF),会将相同的字符串合并,当然可以减小空间占用,虽然本项目默认没有打开,但是默认的/Zi选项会自动打开/GF,这里打不打开一样。
启用C++异常:该项默认打开,在C++项目中(比如MFC中),会大大增加程序体积,增加约30%,关闭并不代表try不能用了,但会一定程度上降低健壮性,对于空间要求较高的程序,建议关闭。
对于正式项目,请参见MSDN,看看会不会造成不利影响。
运行库:默认多线程DLL(/MD),体积最优的方案,如果对方没有VS运行时库,选择/MT 会将C/C++运行库静态编译,体积增加不少,因此,我的选择一般是程序与redist包一起发布,也就几M,而且以后永远可以接受/MD版本了。
缓冲区安全检查:关闭的话,减少0.5K~1K体积(默认情况,VC的段长度512字节,因此程序体积变化的最小单位是0.5K)。
启用增强指令集:真想用SSE3的话去用Intel C++,VS2008只支持到SSE2,而且,在我的机器上貌似使用默认设置就能达到选择SSE2的相同速度,如果安装了Intel C++ 11,可集成与VS2008,同样的地方选择SSE3效果超群。
windows运行软件出现报错怎么办
windows运行软件出现报错怎么办windows运行软件出现报错怎么办当我们用windows打开一个软件或者游戏,无非会有两种情况,要么成功打开,要么报错,对于报错打不开的原因也很多,可能是软件本身安装不完整,或软件不兼容系统,或破解版游戏没破解好等等,尤其是新装的电脑系统,可能报错提示更普遍,windows运行软件出现报错的解决方法其实很简单,下面由店铺告诉你!windows运行软件出现报错的解决方法缺少d3dx9_xx.dll,打开一些游戏,可能会收到这种错误提示“无法打开此程序,因为计算机中丢失d3dx9_xx.dll(xx不一定是哪个数),遇到这种错误,许多人首先想到,直接去百度上搜缺少的那个d3dx9文件,下载下来放入游戏目录,这种方法用后,一般该游戏还真能进去了,但是,这实际上是一种治标不治本的方法。
因为把d3dx9下载到游戏目录里面,虽然这个游戏能玩了,但是别的游戏很可能还会因为缺失这个文件而进不去,这时又得把这个d3dx9再复制到另一个游戏的目录,而且,这个游戏要d3dx9_43,说不定另一个游戏要的是46或者39或什么的,这又得去再找缺失的另一个d3dx9文件下载,如此反复,非常麻烦。
实际上,这种d3dx9_xx缺少的错误,不是因为游戏目录中缺少这个文件(这个文件根本就不是游戏目录里自带的),而是电脑上没有安装完整的directx。
directx是微软开发的一个游戏运行库,现在多数游戏都需要这个运行库来运行,而d3dx9文件正是这个运行库里面的东西。
这种错误的最好解决方法是,网上下载一个DirectX Redist 2010.6,大小有个8,90mb,安装这个时,进度条里会看到一个接一个的d3dx9_xx.dll被安装到电脑的系统目录下。
安装完成后,本来提示缺少文件的游戏就能打开了。
目前许多大型游戏的CommonRedist或Redist里面都有这个DirectX运行库的安装程序,一般为dxwebsetup,这个是DirectX的在线安装版本,需要网络连接才能安装,当然也有少数游戏(如cod11)里面直接集成了完整版的DirectX运行库安装程序。
VS08添加变量出现脚本错误解决方法
用VS2008进行MFC编程时添加变量出现脚本错误的解决方法今天用vs2008练习mfc应用项目,编辑一个对话框界面,右键单击一个文本编辑框,添加成员变量(添加函数也如此),弹出成员变量编辑对话框时出现错误信息:对象不支持此属性或方法。
这是一个常见的网页脚本错误信息,出错的页面文件就是vs2008成员变量编辑对话框的界面页面文件,文件路径是 Visual Studio 8/VC/VCWizards/CodeWiz/MFC/Variable/HTML/2052/default.htm 。
根据错误信息,首先怀疑是ie的问题了,在ie中尝试打开该文件,同样出错,想到最近安装了ie8,呵呵,可能是微软自己的产品打架了。
网上找了一下,已经有不少vs2008开发人员发现了这个问题,同样也给出了不少的解决方法,比较权威比较安全的是一个msdn博客上发布的一个方法,原文描方法如下:Please follow the following steps:- Open regedit (on a 64-bit OS, open the 32-bit regedit)- Under“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Interne tSettings\Zones”, create a new key called 1000 (if it isn't already there)- Under 1000, create a DWORD entry with:o Name = 1207o Type = REG_DWORDo Data = 0x000000该博客文章原文地址:/vcblog/archive/2009/03/28/some-vs2005-and-vs 2008-wizards-pop-up-script-error.aspx方法比较简单,就是打开注册表编辑器,找到“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Interne tSettings\Zones”,在这个项下面新增一个名字为1000的子项,并且在新增的1000项里添加一个名称为1207的DWORD键,值为0。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题文章分类:C++编程VC9编译的程序在没有装过VC9(确切的说是.Net Framework3.5)的机器上运行时,如果提示“由于应用程序配置不正确,应用程序未能启动。
重新安装应用程序可能会纠正这个问题。
”这个错误,那么就说明该程序动态链接了VC9的运行时库,(如果还用到了MFC,那么可能动态链接了VC9的MFC库,同理还有ATL库),以及缺少对应的manifest文件,程序在目标机器上没有找到这些库和配置文件,因此导致了这个错误。
出现这种情况的VC9编译器可能存在3个版本,接下来分别阐明:1、没有打过任何补丁的VS2008该版本对应的CRT/MFC/ATL库的版本号为9.0.21022.8,这个版本号在后面会用到。
这个版本的程序部署比较简单,直接把VC安装目录下的redist目录(C:\Program Files\Microsoft Visual Studio 9.0\VC\redist)中需要的库以及对应的manifest文件拷贝到执行程序同目录下,这样程序到任何机器上都能够正常运行了。
2、打过SP1补丁的VS2008打过该补丁后,系统中存在着两个版本的CRT/MFC/ATL库,版本号分别为9.0.21022.8和9.0.30729.1,这导致了manifest文件中记录的版本号和实际库的版本号不一致(程序要求它们的版本号一致才能运行)。
这个版本的程序部署需要两个步骤,首先要使manifest文件中依赖项的版本号与实际库的版本号一致,均为9.0.30729.1,方法是在工程设置中增加一个宏定义_BIND_TO_CURRENT_VCLIBS_VERSION,该宏定义于C:\Program Files\Microsoft Visual Studio 9.0\VC\include\crtassem.h文件中,然后重新编译程序。
接下来还是将VC安装目录下的redist目录(C:\Program Files\Microsoft Visual Studio 9.0\VC\redist)中需要的库以及对应的manifest文件拷贝到执行程序同目录下,然后修改manifest文件中依赖项的版本号为9.0.21022.8,这样使得程序误以为该目录下库的版本号为9.0.21022.8(实际上是9.0.30729.1版本),这样程序到任何机器上都能够正常运行了。
3、打过SP1补丁与SP1 ATL 安全更新 (KB973675)的VS2008这是最新的更新。
在SP1补丁之后,微软又于近日发布了一个用于智能设备的 Microsoft Visual Studio 2008 Service Pack 1 ATL 安全更新 (KB973675),该补丁又将CRT/MFC/ATL库的版本号升级,为9.0.30729.4148,这次升级比较好,manifest文件与库的版本号一致了,不像SP1一样升级的不彻底。
这样只需要在工程设置中增加一个宏定义_BIND_TO_CURRENT_VCLIBS_VERSION,接下来重新编译程序,然后直接把VC安装目录下的redist目录中需要的库以及对应的manifest文件拷贝到执行程序同目录下,这样程序到任何机器上都能够正常运行了。
顺便提一下,如果不想在发布程序时带上这些库和manifest文件(如果没有必要的话),那么可以采用静态编译CRT和MFC,然后把manifest文件添加到资源中,这样编译出的程序只要一个exe就可以在任何机器上直接运行了。
参考文章:1、“应用程序配置不正确,程序无法启动”的解决方法资料收集:有的时候,你在Visual C++上面经过好几个月的辛勤努力,终于将程序编写完成并且测试完毕,然而当你试图在客户的发布机上运行刚写好的程序时,有可能会碰到类似下面的错误,操作系统告诉你“由于应用程序配置不正确,应用程序未能启动。
重新安装应用程序可能会纠正这个问题”.一般情况下,这个问题都是由于程序不能找到所需要的C运行库(CRT)而引起的。
在Windows XP SP2以后,Windows引入了Side-by-Side执行的概念,这个概念本来是.NET提出来的,但是Windows后来将这个概念集成到操作系统层面上来了。
大家都应该知道Dll Hell的问题,为了解决Dll Hell的问题,Side-By-Side提出不同版本的dll文件可以同时存在于同一个系统里面,而且依赖于不同版本dll的应用程序在运行的时候可以使用到它当初被编译生成的dll。
前面的话,有点绕,举个例子:1. 假定你编写了一个C++程序A,是使用MFC 8.0(这个版本是随着Visual Studio 2005)发布的。
2. 之后你的机器升级了Visual Studio的版本,从2005升级到2008,2008的MFC库是9.0版本的,这个时候你的操作系统里面安装了两个版本的MFC,分别是8.0和9.0。
3. 你在Visual Studio 2008编写了另外一个C++程序B,B依赖与MFC 9.0。
4. 如果你运行程序A的话,操作系统会将MFC 8.0加载到A的进程里面。
5. 如果你这时同时运行程序B,操作系统会将MFC 9.0加载到B 的进程里面。
这就是Side-by-side的执行概念。
操作系统之所以能够这样做,是因为它在加载程序A和B之前,除了查看PE格式里面A和B所依赖的Dll信息,都会查看A和B的manifest文件。
Manifest 文件保存了Windows可执行文件(包括exe和dll文件)要运行起来的环境设置信息,文件名一般是可执行文件的文件全名加上.manifest。
例如notepad.exe 的manifest文件就应该是notepad.exe.manifest。
例外有的程序将manifest 文件直接嵌入到可执行文件的资源里面了,这也就是为什么有的时候你看不到程序的manifest文件的原因。
通常来说,一个manifest文件的内容如下(test.exe.manifest文件):上面的例子里面,就说明这个程序依赖于CRT 9.0,而且是调试版的,CPU架构是32位的CPU。
对于将manifest文件嵌入到资源文件的程序我们也有办法看到manifest的信息。
1. 一种是使用mt.exe(Visual Studio自带的manifest处理程序):mt -inputresource:test.exe;#1 /out:test.manifest2. 另外一种是使用dumpbin程序将整个exe的内容打印到一个文件,然后用文本编辑器打开,搜索Assem字符串样式就能找到manifest信息:解决方案知道了程序依赖于具体哪一个dll以后,你可以将所依赖的dll拷贝到程序的安装文件夹里面,以CRT库绑定失败为例,介绍解决步骤:1.从上例中我们知道程序依赖的Microsoft.VC90.DebugCRT库,版本号是9.0.21022.8,需要32位机器版本的CRT。
这个依赖项一般是因为你的程序是调试版,所以Visual Studio在编译的时候,将调试版的CRT加入程序的依赖项。
2.从Visual Studio的安装文件夹里面将D:"Program Files"Microsoft Visual Studio 9.0"VC"redist"Debug_NonRedist"x86中的Microsoft.VC90.DebugCRT整个文件夹拷贝到应用程序所在的文件夹里面,注意:a)如果你的程序依赖的是32位的CRT,则要拷贝x86文件夹里面的Microsoft.VC90.DebugCRT文件夹,如果是先x64程序,则要拷贝x64文件夹里面。
b)你需要确定Microsoft.VC90.DebugCRT文件夹里面的Microsoft.VC90.DebugCRT.manifest文件里面保存的版本信息而你程序依赖的版本信息匹配,Microsoft.VC90.DebugCRT.manifest里面的版本信息大版本号一定要一致,小版本号一定要等于或者大于你程序依赖的CRT的小版本号。
比如上例中,我们的程序是依赖于CRT 9.0.21022.8,而我们的Microsoft.VC90.DebugCRT.manifest的版本是9.0.30729.1,这样是可以的;而8.0.30729.1就会有问题。
如果大版本号一样,小版本号不一致的话,一个比较简单的方案就是修改程序的manifest文件,使其互相匹配就可以了。
3.如果你的程序不是依赖调试版本的CRT,而是release版本的CRT,直接去微软的官方网站下载一个crt redist包安装上就可以了。
附:解决方案参考:方案一:方法一:在C:\Program Files\Microsoft Visual Studio 8\VC\redist\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列文件:msvcm80d.dllmsvcp80d.dllmsvcr80d.dllMicrosoft.VC80.DebugCRT.manifest把这几个文件拷贝到目标机器上,与运行程序同一文件夹或放到system32下,就可以运行那个程序了。
其他release版,MFC程序什么的都是拷redist下相应文件夹下的文件就可以了,文件夹后都有标识!方法二:修改编译选项,将/MD或/MDd 改为 /MT或/MTd,这样就实现了对VC运行时库的静态链接,在运行时就不再需要VC的dll了。
方法三:工程-》属性-》配置属性-》常规-》MFC的使用,选择"在静态库中使用mfc" 这样生成的exe文件应该就可以在其他机器上跑了。
方法四:你的vc8安装盘上找到再分发包vcredist_xxx.exe和你的程序捆绑安装我逐一测试下来,直到第三个方法才成功.第二个方法不知道在哪里修改编译选项所以放弃了,第四个方法不喜欢,这跟直接安装.net framework 2.0 有什么区别吗?还不如直接安装.net framework 2.0 呢.方案二:最早出现这个错误我和许多人认为的一样认为是缺乏DLL库文件导致.但是在测试机复制了DLL甚至安装了.net framework 2.0以后都无法解决问题,最后确认不是由缺乏DLL所致因为程序是纯win32的应用程,非托管代码,所以也无需.net frameworkVisual C++2003/2005默认的MFC程序是使用动态MFC库(Use MFC in a Shared DLL)来链接的而动态MFC库使用的是Multi-threaded DLL (/MD)由于XP对于PE文件格式监测更加严格.就会导致部分使用多线程DLL的可执行文件在调用的时候出错修改项目属性的编译开关Project->Property->configuration Properties->C/C++->CodeGeneration->Runtime Library修改成Multi-threaded (/MT)修改了Runtime类型以后需要将MFC的编译类型也改成静态库Project->Property->configuration Properties->General->Use of MFC修改成Use MFC in a Static Library一部分情况下在这步就能解决问题另外一部分情况会遇见如下情况编译器报错CODE:nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operatornew[](unsigned int)" (??_U@YAPAXI@Z) already defined inlibcpmt.lib(newaop.obj)[Copy to clipboard]产生这个问题的原因是库依赖关系在Project->Property->configuration Properties->Linker->Command Line 加入编译开关/verbose:lib可以显示详细的库链接顺序CODE:------ Build started: Project: PerfMonDemo, Configuration: Release Win32 ------Linking...Searching librariesSearching d:\Program Files\Microsoft Visual Studio8\VC\PlatformSDK\lib\pdh.lib:Searching d:\Program Files\Microsoft Visual Studio8\VC\lib\DelayImp.lib:.................Searching d:\Program Files\Microsoft Visual Studio8\VC\atlmfc\lib\nafxcw.lib:Finished searching libraries.\Release/PerfMonDemo.exe : fatal error LNK1169: one or more multiply defined symbols foundBuild log was saved at "file://d:\Dev\PerformanceMonitor\Release\BuildLog.htm"PerfMonDemo - 2 error(s), 0 warning(s)========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped==========[Copy to clipboard]我们发现在libcpmt.lib声明过的operator new在nafxcw.lib中再次定义解决方法如下Project->Property->configurationProperties->Linker->Input->Additional Dependencies加入nafxcw.liblibcpmt.libProject->Property->configuration Properties->Linker->Input->Ignore Specific Library加入nafxcw.liblibcpmt.lib这样链接程序就不会先按照默认顺序来连接这两个库文件而是在最后在加入对他们的引用.这样就避免了这个问题下面是一张可能发生冲突的列表若要使用此运行时库请忽略这些库单线程 (libc.lib) libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib多线程 (libcmt.lib) libc.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib使用 DLL 的多线程 (msvcrt.lib) libc.lib、libcmt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib调试单线程 (libcd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcmtd.lib、msvcrtd.lib调试多线程 (libcmtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、msvcrtd.lib使用 DLL 的调试多线程 (msvcrtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib。