visual-studio - 为什么 Visual Studio 2015 无法运行 exe 文件 (ucrtbased.dll)?

标签 visual-studio visual-studio-2015 exe

我已经安装了 Visual Studio 2015 并使用一些代码创建了 Win32 项目。我编译成功了,但是我无法启动exe文件,因为我没有一些ucrtbased.dll......那我该如何解决呢?

enter image description here

编辑:
英文等效消息是:
“程序无法启动,因为您的计算机中缺少 ucrtbased.dll。请尝试重新安装程序以解决此问题。”

最佳答案

这个问题来自 VS 2015 默默地无法复制 ucrtbased.dll (调试)和 ucrtbase.dll在安装 Visual Studio 期间(发布)到相应的系统文件夹中。 (或者您在安装过程中没有选择“Visual C++ 2015 的常用工具”。)这就是重新安装可能会有所帮助的原因。但是,重新安装是一种极端措施……无需完全重新安装即可解决此问题。
首先,如果您并不真正关心潜在问题并且只想让这个项目快速运行,那么这里有一个快速解决方案:只需复制 ucrtbased.dll来自 C:\Program Files (x86)\Windows Kits\10\bin\x86\ucrt\ucrtbased.dll (用于 32 位调试)到可执行文件旁边的应用程序的\debug 目录中。然后它将被找到并且错误将消失。但是,这只适用于这个项目。
更持久的解决方案是获取 ucrtbased.dllucrtbase.dll进入正确的系统文件夹。现在我们可以开始将这些文件复制到\Windows\System32 和\SysWOW64 中,它可能会解决问题。然而,这不是最好的解决方案。这首先失败是有原因的,并且以这种方式强制使用特定的 .dll 可能会导致重大问题。
最好的解决方案是打开控制面板 --> 程序和功能 --> Microsoft Visual Studio 2015 --> 修改。然后取消选中“Visual C++ --> Visual C++ 2015 的常用工具”。单击下一步,然后单击更新,几分钟后,应卸载常用工具。然后重复,但这次安装通用工具。确保禁用了防病毒,没有打开其他任务等,它应该可以工作。这是确保将这些文件准确复制到应在的位置的最佳方法。

错误代码 :请注意,如果安装程序返回一个神秘的错误编号,例如 -2147023293,您可以使用任何免费的在线十进制到十六进制转换器将其转换为十六进制。对于这个错误,它是 0xFFFFFFFF80070643,删除 FF 并在谷歌上搜索“0x80070643”意味着“0x80070643 - 安装缓存或 ISO 已损坏”。

为什么是 ucrtbased.dll甚至需要? : 任何名为“crt”的 DLL 都是“C-Run-Time”模块或库。 Microsoft explains them best .今天有许多 CRT 变体。它们包含所有 Microsoft 编译的可执行文件使用的基本帮助代码,以“填充”或帮助您的可执行文件在不断增长的操作系统版本和硬件上运行。如果使用 MSVC 编译器,相关的 CRT DLL 会在编译时自动链接。 (如果在编译时找不到 DLL,则会生成链接错误。)
一种方法 不是 需要 DLL,是将其“静态链接”到您的项目。这意味着您实际上获取了ucrtbased.dll 的内容。 ,并将其包含在您的可执行文件中。您的文件大小将增加大约 ucrtbased.dll .
顺便说一句,如果你曾经运行过一个 MSVC 程序(通常来自另一个人,你从以前的操作系统版本中编译的旧程序之一,或者你来自另一台机器的程序)并且它没有启动,并给出错误消息需要“Microsoft Visual C++ 20xx Redistributable”或“run-time”——这意味着它找不到所需的*crt*.dll文件。安装该特定的可再发行包(如果已知)将安装 DLL,并允许程序运行......或者至少克服该错误并提醒您另一个丢失的 DLL。
如果您发现自己处于这种“DLL hell ”的困境中,请在 Google 上搜索“dependency walker”以获取高级工具,以显示哪些 DLL 仍然缺失。专业软件通常不会发生这种情况,因为它们的(大型、捆绑的)安装程序会检查任何缺少的依赖库(包括 CRT)并首先安装它们。

关于visual-studio - 为什么 Visual Studio 2015 无法运行 exe 文件 (ucrtbased.dll)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33743493/

相关文章:

c++ - OpenCV 错误:cv::cvtColor 中的断言失败 (scn == 3 || scn == 4),文件 ..\..\..\..\opencv\modules\imgproc\src\color.cpp,第 3737 行

c# - 不同的构建操作在 csproj 中做了什么。 IE。附加文件或假货

c++ - 单文件 Makefile 问题 : C++

c# - SVCUtil 或 WSDL 批处理

c# - 如何在设置文件中保存对象列表?

c# - 重命名字段时如何禁用 Visual Studio 2015 灯泡?

visual-studio-2015 - 从 Visual Studio 2015 外部使用 gulp

c++ - 在Android上执行纯二进制文件

linux - 如何从 Python 项目构建 .exe?

.net - 学习直接计算的好网络资源?