永远也不完美的程序

不断学习,不断实践,不断的重构……

常用链接

统计

积分与排名

好友链接

最新评论

应用程序配置不正确,程序无法启动的问题小结(转)

转自:http://blog.csdn.net/waterathena/archive/2009/04/20/4094771.aspx

重装系统之后,开发环境进行重新配置了。因为之前那个环境用了大概有半年多了,所以只是基本的配置作了记录,其他细节的东西并没有以文字方式记录下来。这次运行起来有了一些未遇到过的问题。

问题1:重装系统之前就遇到过,解决了。主要原因缺少DLL

问题描述:项目组要提交0.9版到QT部门进行测试,打包发布文件之后,在测试部测试电脑上安装之后,发现双击.EXE不能运行。弹出信息框:由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。

解决方法:当时网上一查发现需要拷贝VS2005安装包目录下的一些DLL文件。我的安装目录是:C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86。我把这个目录下的所有相关文件都拷贝到项目生成文件目录下。

参考原文:http://www.cnblogs.com/wuhanhoutao/archive/2008/01/09/1031928.html

问题2:在重新安装系统,重新安装开发环境之后,工作了几日后,发布新的版本给QT测试部门测试。发现又出现这样的问题。主要原因MANIFEST不正确

问题描述:安装完成之后,点击.exe不能运行。弹出信息框:由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。

其中有一次弹出的信息框为英文操作系统下面的信息:The application has failed to start because its side-by side configuration is incorrect.

正是这个信息里面的“side-by-side configuration”让我去了解WINSXS。

参考文章:http://microsoft.cnfan.net/vista/3434.html (vista WinSxS 混乱导致的应用程序不能启动 )

参考文章:http://blog.csdn.net/arau_sh/archive/2008/12/17/3538252.aspx (提供四种解决方法)

参考文章:http://hi.baidu.com/freedomknightduzhi/blog/item/60a5012e512bba554fc226e9.html

参考文章:http://www.cnblogs.com/holly/archive/2009/02/20/1395150.html (可以尝试)

参考文章:http://blog.csdn.net/newweapon/archive/2008/06/17/2556857.aspx

官方参考资料:http://msdn.microsoft.com/en-us/library/dd408052(VS.85).aspx

参考文章:http://blogs.msdn.com/suzcook/archive/2004/05/14/132022.aspx (APP.CONFIG example)

我的解决方法:

1.我试验了在测试目标机上安装VC++ 2005 Redistribute package,.exe可以正确运行。但是我觉得这个并不能代表真正原因,因为之前我也没有安装任何发布包,但是.exe可以正确运行。

2.参考文章“vista WinSxS 混乱导致的应用程序不能启动 ”可以知道,.exe在运行的时候执行的进程去系统默认路径寻找需要的DLL文件,而没有使用拷贝到本目录下的DLL文件。所以如果系统没有安装发布套件,那么执行的时候就出现了“应用程序配置不正确……”的错误。

该文章中提供的解决方案把MANIFEST文件不要内嵌到.EXE文件中,调整编译设置后我重新编译了程序,然后拷贝程序到目标测试机测试,发现还是不行。这个时候我去查看了编译生成在外部的MANIFEST文件(用文本文件可以打开MANIFEST)文件,发现了问题:
 

仔细一看就发现同样的DLL写了两次,只是版本不同。而我拷贝到执行文件同目录下的版本为8.0.50727.762。把最后那个dependency分支去掉后,在把执行文档所在的整个目录拷贝到QT目标测试机就运行起来了。

题外话:

1.在上面的参考文章中提到使用静态链接MFC库的形式,就不会出现这样的问题。但是静态链接库不好,另外也会造成编译生成的.EXE庞大。

如果实在没有办法的情况下,也只能静态编译了。设置顺序为:Project->Properties(ALT+F7)->Property Page->General->Project Defaults->use of MFC设置:USE MFC IN A STATIC LIBRARY

然后BUILD。

2.在目标测试机上安装相应的发布套件。VC_REDIST_X86.EXE

需要把官方发布的安装套件和你的程序捆绑安装,很麻烦。需要判断操作系统(32or64位),需要判断操作系统当前使用语言,然后安装对应的版本。这是一定能解决不能运行的问题的办法。

Microsoft Visual C++ 2005 Redistributable Package (x64) 下载地址:

http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=90548130-4468-4bbc-9673-d6acabd5d13b

Microsoft Visual C++ 2005 Redistributable Package (x86)

http://www.microsoft.com/downloads/details.aspx?familyid=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=zh-cn

3. 如何查看本机的.NET Framework版本

参考文章:http://blog.csdn.net/FantasiaX/archive/2008/05/17/2453907.aspx

我喜欢的方法:从注册表里查

注册表其实就是一个大型的“键-值对列表”(Key-Value Pair List)。注册表中的键是以树状层级结构记录的,所以图标看起来像是一个“文件夹”;一个键下,可以有“值”,而可以有再下一级的键。值是有数据类型的,比如字符串型、数字型;每个值都有自己的“Value Name”和“Value Data”。所以:

如果:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727键下Value Name为Install的值的Value Data等于1,则说明.NET Framework 2.0.50727已经安装。同理,检查HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0键和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5键下的Install值的Value Data就知道是否安装了这两个版本。我估计,如果没有安装过3.0和3.5的话,这两个键是不会存在的,如果安装后又卸载了,键可能会在,Install的Value Data可能会是0。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/waterathena/archive/2009/04/20/4094771.aspx

posted on 2010-01-10 23:36 狂烂球 阅读(5351) 评论(0)  编辑 收藏 引用 所属分类: 图形编程


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理