为什么Visual Studio 2015 不能运行 exe 文件(ucrtbased.dll)?

Why Visual Studio 2015 can't run exe file (ucrtbased.dll)?

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

编辑: 英文等效消息是: "The program can't start because ucrtbased.dll is missing from your computer. Try reinstalling the program to fix this problem. "

问题已通过重新安装 Visual Studio 2015 解决。

此问题是由于 VS 2015 在安装 Visual Studio 期间无法将 ucrtbased.dll(调试)和 ucrtbase.dll(发布)无提示地复制到适当的系统文件夹中。 (或者您在安装过程中没有 select "Common Tools for Visual C++ 2015"。)这就是重新安装可能会有帮助的原因。但是,重新安装是一种极端措施...无需完全重新安装即可解决此问题。

首先,如果你并不真正关心底层问题,只是想让这个一个项目快速运行,那么这里有一个快速的解决方案:只需复制ucrtbased.dllC:\Program Files (x86)\Windows Kits\bin\x86\ucrt\ucrtbased.dll (对于 32 位调试)到应用程序的 \debug 目录以及可执行文件。然后它将被发现并且错误将消失。但是,这只适用于这个 one 项目。

一个更永久的解决方案是将 ucrtbased.dllucrtbase.dll 放入正确的系统文件夹中。现在我们可以开始将这些文件复制到 \Windows\System32 和 \SysWOW64 中,它 可能 解决问题。但是,这不是最好的解决方案。这首先是有原因的,并且以这种方式强制使用特定的 .dll 可能会导致重大问题。

最好的解决办法是打开控制面板 --> 程序和功能 --> Microsoft Visual Studio 2015 --> 修改。然后取消选中“Visual C++ --> Common Tools for Visual C++ 2015”。单击“下一步”,然后单击“更新”,几分钟后,Common Tools 应该会被卸载。然后重复,但这次安装通用工具。确保 anti-virus 被禁用,没有其他任务打开等,它应该可以工作。这是确保将这些文件准确复制到应有位置的最佳方法。


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


为什么甚至需要 ucrtbased.dll:任何名为“crt”的 DLL 都是“C-Run-Time " 模块或库。 Microsoft explains them best。今天有许多 CRT 变体。它们包含所有 Microsoft 编译的可执行文件使用的基本 helper-code,以“填充”或帮助您的可执行文件在 ever-growing 数量的 OS 版本和硬件上运行。如果使用 MSVC 编译器,相关的 CRT DLL 会自动链接到 compile-time。 (如果在 compile-time 找不到 DLL,则会产生链接错误。)

需要 DLL 的一种方法是将其“statically-link”到您的项目。这意味着您实际上获取了 ucrtbased.dll 的内容,并且 将其包含在您的可执行文件中 。您的文件大小将增加大约 ucrtbased.dll.

的大小

顺便说一句,如果你曾经 运行 一个 MSVC 程序(通常来自另一个人,你的旧编译程序之一来自以前的 OS 版本,或者你来自另一台机器)并且它没有启动,给出了需要“Microsoft Visual C++ 20xx Redistributable”或“run-time”的错误消息 - 这意味着它找不到所需的 *crt*.dll 文件。安装该特定的可再发行组件包(如果已知)将安装 DLL,并允许程序 运行... 或至少克服该错误并提醒您另一个丢失的 DLL。

如果您发现自己处于这种“DLL 地狱”困境中,google“dependency walker”是一种高级工具,可以显示哪些 DLL 仍然缺失。这通常不会发生在专业软件上,仅仅是因为它们的(大型、捆绑的)安装程序会检查是否有任何缺失的依赖库(包括 CRT)并首先安装它们。

解决方案对我不起作用。

首先,我使用 Visual Studio 2015 Express,安装程序 "modify" 查询没有建议您可以取消选中的任何 "Common Tools for Visual C++ 2015" 选项。

其次,即使在 2 uninstall/reinstall(许多小时等待他们完成...)之后,问题仍然存在。

我最终通过独立安装程序(独立于 Visual C++ 2015 安装)重新安装整个 Windows SDK 解决了这个问题: https://developer.microsoft.com/fr-fr/windows/downloads/windows-8-1-sdk 要么 https://developer.microsoft.com/fr-fr/windows/downloads/windows-10-sdk

这解决了我的问题。

解决此问题的一种简单方法是执行以下操作(单击图像可缩放):

确保关闭 Visual Studio,然后转到您的 Windows Start -> Control Panel -> Programs and Features。现在这样做:

一个Visual Studiowindow会打开。继续这样做:

Select Common Tools for Visual C++ 2015 的复选框并安装更新。

更新可能需要一些时间(约 5-10 分钟)。 Visual Studio 成功更新后,重新打开您的项目并点击 Ctrl + F5。您的项目现在应该编译 运行 没有任何问题。

我不确定它是否有帮助,但你可以试试 this.This 对我有用

Start -> Visual Studio Installer -> Repair

在此之后启用

下的 Microsoft Symbols Server

TOOLS->Options->Debugging->Symbols

这将自动设置所有问题。

你也可以参考这个link

https://social.msdn.microsoft.com/Forums/vstudio/en-US/6aa917e5-a51c-4399-9712-4b9c5d65fabf/ucrtbasedpdb-not-loaded-using-visual-studio?forum=visualstudiogeneral

我想建议其他解决方案来解决此问题。所以,我推荐给reinstall/install最新的Windows SDK。就我而言,它帮助我解决了使用 QtMSVC 编译器调试程序时的问题。