我必须与我的 EXE 一起提供哪些 DLL 才能使用 Windows 10 通用 CRT?

Posted

技术标签:

【中文标题】我必须与我的 EXE 一起提供哪些 DLL 才能使用 Windows 10 通用 CRT?【英文标题】:Which DLL(s) must I ship alongside my EXE to use the Windows 10 Universal CRT? 【发布时间】:2018-08-10 14:05:53 【问题描述】:

我已使用 Visual Studio 2015 将 C 程序编译为 32 位 EXE,该 EXE 可动态链接到 CRT。我想让用户下载并运行这个 EXE,而不需要先运行 VCRedist 二进制文件。因此,我似乎需要“本地应用”部署一些 DLL。

假设用户的机器安装了通用 CRT(即是 Windows 10 或包含相关 Windows 更新的更早版本)。

仅将C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x86\Microsoft.VC140.CRT\vcruntime140.dll 与我的 EXE 一起发送是否必要且足够

如果我使用 Visual Studio 2017,情况是否完全一样?

【问题讨论】:

是的,也许 msvcp140.dll 也适用于 C++ 程序。 UCRT 是一个系统组件,由 Windows Update 维护。 【参考方案1】:

如果您想避免在目标系统上运行 VCRedist,您必须将 ALL dlls 与您的 .exe 一起分发到以下 两个 目录中

第一

(VS2015) C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x86\Microsoft.VC140.CRT  
(VS2017) C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Redist\MSVC\14.15.26706\x86\Microsoft.VC141.CRT 

第二

C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x86

编译 64 位应用程序时,将目录中的“x86”替换为“x64”。

【讨论】:

【参考方案2】:

您可能希望静态链接您的依赖项。

在 Visual Studio 中实现此目的的步骤是:

    打开Project Properties 选择C/C++ 选择Code Generation 对于Runtime Library,选择Multi-threaded (/MT)

这适用于所有最新版本的 Visual Studio。生成的 EXE 应该是独立的。

【讨论】:

问题是“我必须与我的 EXE 一起提供哪些 DLL 才能使用 Windows 10 通用 CRT?”

以上是关于我必须与我的 EXE 一起提供哪些 DLL 才能使用 Windows 10 通用 CRT?的主要内容,如果未能解决你的问题,请参考以下文章

MSVSMON.exe(远程调试)必须打开哪些端口才能正常工作?

哪些软件涵盖了这些dll?

在 Nest.js 中,如何在我的 API 响应中提供与我的 JSON 对象捆绑在一起的静态内容文件

如何查看 dll (c) exe 调用了哪个函数?

Visual Studio 2010 版本找不到 dll

如何查看哪些 EC2 实例与我的 Elastic Beanstalk 应用程序相关联?