最近在处理项目问题的的时候发现了这么一个问题,就是我们的程序在调用第三方提供的dll文件的时候在一台机器上面会报14001的错误,但是在另一台机器上面不会。两台机器上面的操作系统是相同的。针对这个问题和这个错误码,查找了很多的相关资料。
vc错误查找的给予的对于14001的错误的解释:由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。
下面是搜集的一些网络资料针对这个问题的说明和解决方法个人感觉还是很有参考意义的:
在VS2005下用C++写的程序,在一台未安装VS2005的系统上,
用命令行方式运行,提示:
“系统无法执行指定的程序”
直接双击运行,提示:
“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”
以前用VC6和VS2003的话, 如果缺少库文件,是会提示缺少“**.dll”,但是用VS2005却没有这样的提示。
自己实验了一下,感觉以下几种解决办法是可行的:
方法一:
在类似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和你的程序捆绑安装。
如果安装Microsoft Visual C++ 2005 出现如下错误↓:
事件查看器显示:产品: Microsoft Visual C++ 2005 Redistributable -- Error 1935.安装程序集“Microsoft.VC80.ATL,type=win32,version=8.0.50727.4053,publicKeyToken=1fc8b3b9a1e18e3b,processorArchitecture=x86”过程中发生错误。请参阅帮助和支持获取详细信息。HRESULT: 0x80070422。程序集接口: IAssemblyCacheItem,功能: Commit,组件: {97F81AF1-0E47-DC99-A01F-C8B3B9A1E18E}
解决方法:启动 Windows Modules Installer 服务,再安装。OK,解决。
http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/66bc8cab-c134-49a8-85e5-37ca9efbdeb4/
个人问题解决过程:
1.考虑的是两个方面:
一个是程序调用的dll是否提供了所要的方法;
一个是dll所依赖的dll是否完整。
这两方面都是通过depends工具来查看
2.我的问题是我用的是别人提供的dll文件自己不可以去更改dll文件的生成方式,因此所做的工作就是设法去导入dll所依赖的dll文件。
(1)配置系统环境变量的path路径使dll做可能依赖的系统dll文件能够找到依赖的dll。
(2)推测第三方所提供的dll开发时候应该用的是vs2005或者vs2008在或者就是vs2010,然后所提供的dll文件或许就是动态加载的dll,所以安装了vcredist_x86的vs2005,vs2008以及vs2010版本的,这个地方的操作对于我解决问题起了作用,但是具体是哪一个这个没有去确定
(3)为了使自己程序运行的环境没有必要都去安装vcredist_x86所以找到vcredist_x86安装之后对应的dll文件和调用的第三方的dll放在同一个目录下面,也可以放在C:\WINDOWS\system32但是path路径中的配置一定要有,一般来说都是会有的。
通过上面的三个方面个人的问题是解决了,当然具体到个人的项目里面还有很多的方面要考虑,但就这个dll加载的14001错误,上面的解决方法还是ok的。网上的相关资料还是很多的,希望个人整理的这些对你有小小的帮助。针对vcredist_x86的dll文件以及vs2005,vs2008 和 vs 2010对应的exe安装文件可以搜一下,我也把我搜到的上传一下,共享。