Windows下启动程序无法启动(0x000007b),报错问题分析过程
附件资源:
通过网盘分享的文件:Dependencies_x64_Release.rar链接: https://pan.baidu.com/s/1prrDGHq0Iu2E8gbOJJwWRQ?pwd=5stv 提取码: 5stv
通过网盘分享的文件:ProcessMonitor_316542.rar
链接: https://pan.baidu.com/s/1dEB2Vc3ojY_WwBt9LRRn3Q?pwd=1234 提取码: 1234
问题现象
最近在执行打包后的程序时报了这个错误,虽然问题已经解决了,事后想想,还是总结记录下来;
"0x000007b" 是 Windows 上非常经典的错误码,核心原因是32 位 / 64 位依赖库不匹配,或者关键运行时文件损坏 / 缺失。
排查步骤
1、快速定位程序的目标平台:是32bit, 还是64bit;
2、利用工具快速排查程序启动以来的dll库:
这里推荐使用:DependenciesGui.exe
打开需要检测的exe或者dll
如下图:
查看红色标记的 DLL,重点看:
- 是否有 DLL 找不到
- 是否有 32/64 位架构不匹配的 DLL(会标出来)
像上图比较容易就能定位的,但是注意:也有特殊的情况DependenciesGui.exe无法定位
“DLL 依赖链中的依赖项”
这一种问题就是由于使用到了系统库,dll中用到了系统库,比如你在win11中开发编译运行在你自己的生产环境中,一切都是正常的,但是一旦你的程序跑到目标机器是win10平台;
此时就会出现这种情况,往往还会出现程序启动了,但是莫名其妙的崩溃了,连提示错误都没有。
针对这个情况首先要弄清楚软件在启动时,加载dll的顺序:
这里要给大家推荐第二个工具:Process Monitor 4.0.exe,通过这个工具,将你可以正常启动的程序中查找调用了哪些dll,然后将用到的系统库再打包到你的发布软件包中;