应用程序无法正常启动0xc0150002 解决方案

出现的问题:

  重新安装vs2005编译,发现debug模式下直接提示应用程序无法正常启动0xc0150002.


(一般出现情况是,调用了不同的VS版本编译的debug 模式下的动态库).(release 发布模式下不会出现这个错误.) 解决方法就是 将调用的DLL源码用当前的编译环境再次编译一下.

 


一般有源码的时候,重新将程序依赖的dll重新编译一遍. 就是 这个程序那些库是自己写的.重新编译一下即可.

(一般这些源码都在.否则那里来debug下的dll呢).




  重装系统后安装vs2005 出现 VS2005 由于应用程序的配置不正确,未能启动此应用程序 这个在本机就有这个问题. 网络上一般都是 程序在其他机器上不能运行

depends.exe查看,发现提示错误 minifest 错误.   重新编译整个工程项目





查找了一下资料:

出处:

http://blog.csdn.net/debugconsole/article/details/7870015


最近做一个项目写了一个VC6下的MFC程序,结果传到别人的机子上(WIN7)出现了应用程序正常初始化(0xc0150002)失败的问题,当时还以为就是WIN7的问题,后来把程序拷贝到一台WINXP SP3的程序下还是不行。

    为什么我的机子上可以,而别人的机子上运行不了呢?

    开始google一下,找到了解决的一个办法——在程序运行出错的时候,右键“我的电脑”,然后点击“管理”,再点击“事件查看器",最后看下“系统”,信息如下:

    (1)找不到附属汇编 Microsoft.VC80.DebugCRT,上一个错误是 参照的汇编没有安装在系统上。

    (2)Resolve Partial Assembly 为 Microsoft.VC80.DebugCRT 失败。 参考错误消息: 参照的汇编没有安装在系统上。
    (3)Generate Activation Context 为 C:/scanfile/Debug/libclamavd.dll 失败。 参考错误消息: 操作成功完成。
    可以判断是libclamavd加载的时候出了点问题了,看了下它的manifest文件,其依赖库是Microsoft.VC80.DebugCRT ,这样问题就很明显了,这个dll是在VS2005下编译的,而别人的机子上没有这个环境,我们所编译生成的应用程序由于缺少必需的Debug版本的VC运行库而发生错误。
    解决方法:到我的机子上的vs2005的安装目录下,搜索名字中包含串Microsoft.VC80.DebugCRT的文件,共有3个dll文件(msvcm80d.dll,msvcp80d.dll,msvcr80d.dll)和一个manifest文件(Microsoft.VC80.DebugCRT.manifest),拷贝到别人机子上的工程可执行文件目录下,问题就解决了。
    从这个问题可以发现几点:
    (1)善用工具可以帮助定位问题:事件查看器,depends walker等
    (2)搜索效率,比如这个问题直接搜 ”应用程序正常初始化失败 0xc0150002“肯定会得到很多噪音信息。。。
     PS:网上的解决办法还有就是说下载vcredist_x86,我试了下不大好使。。。

根据上面的内容我的解决方法:
  上述方法可以定位我程序出现问题是在加载一个dll出现错误,通过dependency查看dll发现缺少MFC80UD.DLL等。
在百度
http://blog.csdn.net/gouki04/article/details/5476923  这个文章,

于是试验了一下,开始用向导生成了一个项目,编译,一切没有问题,虽然是庞然大物,但是速度还可以,没想到运行时出现了MFC80UD.dll找不到的问题,

嗯?最近我用了比较的优化,于是猜测是DLL被我删了,于是拿出安装盘,进了维护模式,修复一次,结果,修复没有成功?我昏.Baidu搜一下,没有多少资料,google搜了一下,出来三页,全是微软的英文网页,没有办法,只好硬着头皮看了一下,  弄清了 原来是 Manifest  搞的鬼,

然后修改项目属性,清单工具 中的 输入输出 把嵌入清单文件选否.然后编译,链接运行,成功.

到此我的问题已经解决.





你可能感兴趣的:(vc/MFC)