当前位置:首页 > 开发笔记 > 正文内容

VS2022 编译的程序依赖的 VC 运行库 DLL 怎么手动提取随程序打包这样让没有安装的电脑也能运行?

jiaweisi3个月前 (10-30)开发笔记157

VS2022 编译的程序依赖的 VC 运行库 DLL 怎么手动提取随程序打包这样让没有安装的电脑也能运行?



在 VS2022 中手动提取并打包程序依赖的 VC 运行库 DLL,让未安装 vc_redist.x64.exe 的电脑也能运行程序,可按以下 4 个步骤 操作,每一步都有明确的操作指引:

步骤 1:确定程序依赖的 VC 运行库 DLL(关键!避免盲目复制)

首先需要明确你的程序具体依赖哪些 VC 运行库 DLL(不同程序依赖可能不同,比如是否包含 VCRUNTIME140_1.dll 等)。推荐用 VS 自带的 dumpbin 工具 精准查询:

操作步骤:

1、打开 VS2022 开发人员命令提示符:

按下 Win + S,搜索 “Developer Command Prompt for VS 2022”,右键 “以管理员身份运行”(确保权限足够)。


2、定位到你的程序 .exe 所在目录:用 cd 命令切换路径,例如:

cd C:\你的程序输出目录\Release  # 假设程序在 Release 文件夹下


3、执行命令查看依赖的 DLL:输入以下命令(将 你的程序名.exe 替换为实际的程序文件名):

dumpbin /dependents 你的程序名.exe


4、识别 VC 运行库 DLL:输出结果中,名称以 MSVCP140、VCRUNTIME140、CONCRT140 开头的 DLL 就是需要打包的 VC 运行库(其他 DLL 可能是 Qt 或系统自带的,暂不处理)。示例依赖(64 位程序常见):

MSVCP140.dll

VCRUNTIME140.dll

VCRUNTIME140_1.dll

CONCRT140.dll



步骤 2:找到这些 VC 运行库 DLL 的位置(确保版本匹配)

从你的开发机(已安装 VS2022)中找到步骤 1 识别的 DLL,优先从 VS 安装目录提取(版本与编译环境完全匹配,避免系统目录中可能存在的旧版本)。

常见路径(64 位程序):

VS2022 安装目录(推荐):

plaintext

C:\Program Files (x86)\Microsoft Visual Studio\2022\Community\VC\Redist\MSVC\14.38.33130\x64\Microsoft.VC143.CRT\

说明:14.38.33130 是版本号(你的 VS 版本可能不同,需替换为实际路径中的版本号,可在 MSVC 文件夹下找到最新的版本目录)。

该目录下的 DLL 是 VS2022 自带的,与你的编译环境完全匹配,最可靠。

系统目录(备用,若 VS 目录中找不到):64 位 DLL 在 C:\Windows\System32\(注意:64 位系统中 System32 存放 64 位文件,SysWOW64 存放 32 位文件)。

步骤 3:复制 DLL 到程序目录(与 .exe 同目录)

将步骤 2 找到的所有 VC 运行库 DLL(如 MSVCP140.dll 等)复制到你的程序 .exe 所在的文件夹,与 Qt 的 DLL(如 Qt6Core.dll、Qt6Widgets.dll 等)放在一起。

示例目录结构:

plaintext

你的程序文件夹/

├─ 你的程序名.exe          # 主程序

├─ MSVCP140.dll           # VC 运行库 DLL

├─ VCRUNTIME140.dll       # VC 运行库 DLL

├─ VCRUNTIME140_1.dll     # VC 运行库 DLL

├─ CONCRT140.dll          # VC 运行库 DLL

├─ Qt6Core.dll            # Qt 核心 DLL(通过 windeployqt 生成)

└─ ...(其他 Qt 依赖 DLL)

步骤 4:验证是否成功(在干净环境测试)

为确保打包有效,需在 未安装 vc_redist.x64.exe 的电脑 / 虚拟机 中测试:

将整个程序文件夹复制到目标电脑;

双击 .exe 运行,若能正常启动且无 “缺失 DLL” 错误,则成功;

若仍报错 “缺少 XXX.dll”,说明漏复制了依赖的 DLL,回到步骤 1 重新检查 dumpbin 输出,补充缺失的 DLL 即可。

关键注意事项

版本必须严格匹配:提取的 DLL 版本必须与你的 VS2022 版本一致(例如 VS2022 对应 VC143 版本,DLL 版本号需匹配),否则可能出现 “应用程序无法启动” 或运行时崩溃。

64 位 / 32 位不可混用:

若你的程序是 64 位编译(项目配置为 x64),必须提取 64 位 DLL(来自 x64 目录);

若为 32 位(x86),需提取 32 位 DLL(VS 目录中 x86 子文件夹,或系统 SysWOW64 目录)。

许可合规:微软允许随程序打包这些 DLL,但不可单独分发(必须与你的应用程序一起),需遵守 VC 运行库许可条款。

Qt 依赖仍需处理:此方法仅解决 VC 运行库依赖,Qt 本身的 DLL 需通过 windeployqt 工具生成(在 VS 命令提示符中执行 windeployqt 你的程序名.exe,会自动复制所需的 Qt DLL)。

通过以上步骤,即可手动打包 VC 运行库 DLL,让程序在未安装 vc_redist.x64.exe 的电脑上正常运行,无需用户额外安装运行库。


相关文章

VS打开Qt的ui界面几秒后闪退(ui无法打开文件)的解决办法

VS打开Qt的ui界面几秒后闪退(ui无法打开文件)的解决办法

VS打开Qt的ui界面几秒后闪退(ui无法打开文件)的解决办法.VS打开Qt的ui界面几秒后闪退(ui无法打开文件)的解决办法问题:近两天在vs中直接点解ui界面,自动调用Qt Designer打开界面几秒后Designer界面闪退,回到vs界面,并有“——.ui无法打开文件”的错误提示。这个问题应该是Windows或Qt哪些东西更新造成的,用Qt的几个同学都有反应这个问题。解决方法:注:软件版本:VS2022 + Qt6方法一(评论区网友提供,操作比较简单,可以优先一试):选择“扩展->QT VS Tools->Options”,对话框中左侧选择“Qt->General”,右侧选择“Qt Designer->Run in detached window”选项值设为true 即可解决。...

【开发笔记】创胜系列增加游戏开局确认(自动准备和非自动准备)功能

【开发笔记】创胜系列增加游戏开局确认(自动准备和非自动准备)功能

【开发笔记】只记录逻辑分析和注意的地方,其他简单的不做记录。逻辑分析:1。俱乐部设置增加开局确认数据保存到数据库2。创建房间后发送发送的房间数据带上开局联盟设置的参数3。进入联盟时查询房间列表时要带上参数1  2两个问题好解决,需要注意的是第三个问题。第三个问题有两个地方,是分别是联盟和俱乐部,似乎是两种不同的请求。因为定制的俱乐部,联盟没去仔细看。代码猜测是联盟反向注册到协调服务器的时候带上参数,这种方式会比较简单,修改量比较少。俱乐部却不是这里,俱乐部是全局的:CGlobalInfoManager::CreateRoom这个函数,最好的就是对这个函数传入的时候多添加一个参数进去,然后存储数据的时候一起保存起来,然后再进入俱乐部查询房间的地方为每个房间添加这个参数,前端 UI根据这个参数是否显示开局确认提示标志。联盟查询房间列表是:CAttemperEngineSink::OnTCPNetworkMainClubService这个函数中的://查询现有房间 std::vector<tagRoomTableStatus*> vRoomTa...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。