我必须与我的 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(远程调试)必须打开哪些端口才能正常工作?