程序启动c0150002错误与Visual c++ 9.0 CRT (x86) WinSXS MSM

来源:互联网 发布:iphone多重曝光软件 编辑:程序博客网 时间:2024/05/12 08:01

今天在写好了一个小工具后发现在我的PC上运行良好,但是在有些机器上却会在启动时出现c0150002错误。

怀疑是因为系统环境不同的原因。

正好,安装了Install Shield 2009,想起来它可以检查程序的依赖项,于是拿来检查了一下,果然需要Visual c++ 9.0 CRT (x86) WinSXS MSM,这下大条了,找吧。。。

经过仔细排查,发现我的应用程序使用MFC写的,用的静态MFC,里面并没有用特殊的借口,于是偶再排查它所调用的一个DLL,发现这个DLL就有Visual c++ 9.0 CRT (x86) WinSXS MSM的依赖,继续查,发现DLL里也没有调用特殊的接口或模块,没办法,BAIDU:c0150002错误,想不到找到原因了:http://topic.csdn.net/u/20080915/19/85a68752-2100-4403-befe-eae2db0e551e.html

看到这样一句:不过奇怪的是在静态MFC中使用STL,倒不需要 msvcr90.dll,但是一般的win32工程却要了……

 

才想起我的DLL是Win32工程,不是MFC的,于是修改(VC2008):

属性--配置属性--常规--MFC的使用,从“使用标准 Windows 库”改变为“在静态库中使用 MFC”:

VC配置MFC静态链接方式 

然后再编译连接,检查依赖,果然没有Visual c++ 9.0 CRT (x86) WinSXS MSM的依赖了。拿到之前不能运行的机器上,也没问题了,至此问题圆满解决。

 

使用Install Shield 2009查看程序的依赖项:

Project Assistent -- Application Files, 添加你要检查的可执行文件或DLL,会弹出一个窗口:

Install Shield询问是否检查依赖项

点yes,即可开始检查,通过这个就可以得知你的文件到底是不是和环境相关了。

 

吸取这个教训,以后将尽可能的使用MFC静态库来编写与系统环境无关的VC程序。

原创粉丝点击