解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”

来源:互联网 发布:广东省加工贸易数据 编辑:程序博客网 时间:2024/05/21 07:11

问题:在VS2005下用C++写的程序,在一台未安装VS2005的系统上,
         用命令行方式运行,提示:
    “   系统无法执行指定的程序”
       直接双击运行,提示:
    “由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”

解决方法一下4个:leo采用方法3

 

方法一:
在类似C:/Program Files/Microsoft Visual Studio 8/VC/redi
st/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT 下找到了下列文件:

msvcm80d.dll
msvcp80d.dll
msvcr80d.dll
Microsoft.VC80.DebugCRT.manifest

把这几个文件拷贝到目标机器上,与运行程序同一文件夹或放到system32下,就可以正确运行了。

其他release版、MFC程序什么的都是拷redist下相应文件夹下的文件就可以了,文件夹后都有标识!

方法二:
修改编译选项,将/MD或/MDd 改为 /MT或/MTd,这样就实现了对VC运行时库的静态链接,在运行时就不再需要VC的dll了。

方法三:

工程-》属性-》配置属性-》常规-》MFC的使用,选择“在静态库中使用mfc”
这样生成的exe文件应该就可以在其他机器上跑了。

方法四:

你的vc8安装盘上找到再分发包vcredist_xxx.exe和你的程序捆绑安装

 

 

 

这几个方法的不足之处:

1.对于以上说的第一种解决方案存在以下不妥之处:把msvcrt80.dll、msvcrp80.dll等DLL以及相应的manifest文件同Exe文件放在一起,那么Exe就一定可以运行了吗?这个Exe文件所加载的以上这些dll文件是不是你本地目录所提供的呢?
第一个问题和第二个问题其实是紧密相连的,那个Exe文件不一定能运行起来,因为它所加载的那些80.dll都不是你本地目录所提供的,而是windows/WinSxs目录下的所提供的80.dll。对Exe文件加载了哪些DLL文件,你可以使用IceSword工具来查看。

2.对于第二、三种解决方案,其实不太可能被采纳,因为使用静态链接,文件太大。产品的发布,一般不会采用这种方式。

3.对于第四种方案,可能是最稳妥的一种做法。但这中间也存在一个问题:就是安装包每次运行之前,都先安装vcredist。exe(X86),这就有了问题:其一,多次安装vcredist会不会有问题。其二,用户会不会感觉烦。

原创粉丝点击