背景介绍

记录一次在工作中遇到的问题:编译都没有问题,但是非常简单的EXE启动时会报错:应用程序无法正常启动(0xc0150002)。单击“确定”关闭应用程序。,提示错误码:0xc0150002

现象

现象1

无法启动此程序,因为计算机中丢失VCRUNTIME140_1.dll。尝试重新安装该程序以解决此问题。

现象2

应用程序无法正常启动(0xc0150002)。单击“确定”关闭应用程序。

解决

现象1很显然, 缺少运行库。 你如果安装了visual studio, 那么其安装目录下xxx\Microsoft Visual Studio\2019\Professional\VC\Redist\MSVC会存在需要的运行库或者是运行库安装包。

在缺少的电脑上安装即可。

本文的重点是现象2, 现象2给出的线索很有限。 这种错误的出现, 操作系统都会记录日志。 如何查看事件日志:

  1. Win+r 打开运行窗口
  2. 在输入框中输入eventvwr.msc
  3. 打开后, 点击左侧的windows 日志 > 应用程序
  4. 为了能快速定位到日志,可先清理日志,再执行一遍出错的程序。

如果日志中提示找不到运行库的错误:只需找到所需版本、系统的运行库, 安装或者复制过去即可。

后来经过分析和定位才找到真正的原因:在自己开发的程序中引入了vld_x64.dll动态库导致错误0xc0150002的出现,后来在Debug版本中屏蔽以下代码后问题就解决了:-)

1
2
3
4
#ifdef _DEBUG
#include "vld/vld.h"
#pragma comment(lib, "vld.lib")
#endif

总结

如果类似错误都可去看一下系统日志进行定位,多半是依赖的库缺少或者是版本问题。