应用程序无法正常启动(0x000007b)或者找不到dll文件(以vcruntime140d.dll为例)的原因原理分析和解决方法(亲测已解决)

一、问题1:由于找不到vcruntime140d.dll。无法继续执行代码。重新安装程序可能会解决此问题。

最近运行exe文件的时候出现了:“由于找不到vcruntime140d.dll。无法继续执行代码。重新安装程序可能会解决此问题。”
在这里插入图片描述

上网找了很多文章,也下了一些软件来修复,发现他们都没有说清楚问题根本原因和解决方法,所以写篇文章来记录解决这个问题的原理和过程。
首先,它是vcruntime140d.dll文件找不到了,就说明程序在我们的电脑上的dll路径当中都没有找到这个dll文件。
大致的顺序是这样的:
1)应用程序所在目录
2)系统目录,GetSystemDirectory获取
3)16位系统目录
4)Windows目录,用GetWindowsDirectory获取
5)运行程序的当前目录
6)Path环境变量
具体的顺序会根据操作系统和注册表SafeDllSearchMode键的值会有所变化。想了解的可以参考我之前的文章《DLL劫持病毒的分析》:https://blog.csdn.net/Onlyone_1314/article/details/108818379
回到vcruntime140d.dll文件找不到的问题,那我们就下载一个vcruntime140d.dll,放在当前exe文件下或者放在Windows目录下都行,放在当前exe文件下就是只让你这次的这个文件调用,放在Windows目录下下次就可以让别的程序也调用。

二、问题2:应用程序无法正常启动(0x000007b)。请单击“确定”关闭应用程序。

开始随便下载了一个vcruntime140d.dll,放在当前exe文件的目录下,又出现了下面这个问题:“应用程序无法正常启动(0x000007b)。请单击“确定”关闭应用程序。”
在这里插入图片描述

这里就涉及到另一个问题:操作系统的位数和dll文件的位数。任何一个不匹配,就会出现这个问题。我出现这个问题就是这个test.exe是个32位的程序,我们查看test.exe的基本信息:
在这里插入图片描述

发现它是用Visual C++编写的Windows 32位控制台程序。但我下的是一个64位的vcruntime140d.dll:
在这里插入图片描述

所以程序是能够找到我的这个vcruntime140d.dll的,没用报之前“找不到vcruntime140d.dll”的错,但是因为位数不匹配导致了“应用程序无法正常启动”。
所以我们重新下一个32位的vcruntime140d.dll文件,放在当前exe文件所在的目录:
在这里插入图片描述

运行test.exe:
在这里插入图片描述

成功解决问题。

三、Windows目录下的SysWOW64和System32的问题

另外就是关于把应该把dll文件放在Windows目录下的SysWOW64还是System32:
System32是Windows操作系统的系统文件夹,是操作系统的中枢,存放的是64位的系统文件。
SysWOW64(Windows-on-Windows 64-bit)是一个Windows操作系统的子系统, 能够运行32位应用 windows操作系统程序, 并且在所有的64-bit 版本的windows上都存在。
所以我们应该把test.exe需要的dll文件放在SysWOW64文件夹下面:
在这里插入图片描述

也能成功解决问题。

下面分别测试把vcruntime140d.dll放在SysWOW64和System32文件夹下
(1)SysWOW64和System32文件夹下都没有vcruntime140d.dll文件:
在这里插入图片描述

程序显示找不到vcruntime140d.dll。
(2)vcruntime140d.dll文件放在System32文件夹下:
在这里插入图片描述

程序显示找不到vcruntime140d.dll。
(3)vcruntime140d.dll文件放在SysWOW64文件夹下:
在这里插入图片描述

程序成功运行。
这样,我们就证明了必须把vcruntime140d.dll文件放在SysWOW64文件夹下,test.exe才能运行。

四、exe文件调用dll文件的过程

我们把test.exe放到一个纯净的64位的windows 7操作系统的虚拟机里,运行test.exe:
在这里插入图片描述

它首先报的是缺少ucrtbased.dll,我们下载一个64位的ucrtbased.dll放在当前目录:
在这里插入图片描述

它又会报缺少api-ms-win-core-timezone-l1-1-0.dll,我们又下载一个64位的api-ms-win-core-timezone-l1-1-0.dll放在当前目录:
在这里插入图片描述

之后的过程我就不一个一个dll文件添加截图了,通过这些我们就可以知道其实就是test.exe程序调用这些dll文件和这些dll文件直接的相互调用,我们只要把它们正确的都添加上,程序就可以正常运行:
在这里插入图片描述

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
VCRUNTIME140D.dll 是 Microsoft Visual C++ Redistributable 的一部分,它通常用于运行需要 C++ 库的应用程序。如果你在运行程序时收到了“不到 VCRUNTIME140D.dll”的错误消息,这可能意味着你的系统缺少了这个文件文件已损坏。 以下是一些可能的解决方法: 1. 重新安装 Microsoft Visual C++ Redistributable 你可以尝试重新安装 Microsoft Visual C++ Redistributable,以确保 VCRUNTIME140D.dll 文件存在于你的系统。你可以从 Microsoft 的官方网站下载最新版本的 Visual C++ Redistributable,然后安装它。 2. 复制 VCRUNTIME140D.dll 文件 如果你已经安装了 Microsoft Visual C++ Redistributable,但仍然无法VCRUNTIME140D.dll 文件,你可以尝试从另一个计算机上复制该文件到你的系统。确保将文件复制到与你的应用程序相同的文件。 3. 更新操作系统 如果你的操作系统不是最新版本,你可能会遇到一些兼容性问题。尝试更新你的操作系统,并确保安装了最新的补丁程序和驱动程序。 4. 检查病毒 有时,恶意软件会删除或破坏系统文件,包括 VCRUNTIME140D.dll。运行杀毒程序,确保你的系统没有感染病毒。 5. 重新安装应用程序 如果以上方法无法解决问题,你可以尝试重新安装应用程序。这可能会解决VCRUNTIME140D.dll 相关的问题。请注意,在重新安装应用程序之前,你应该备份你的数据,以免数据丢失。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值