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

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

jiaweisi4个月前 (10-30)开发笔记245

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 的电脑上正常运行,无需用户额外安装运行库。


相关文章

抖音小程序提示编译错误 主包不能直接引用分包文件,请配置占位组件

抖音小程序提示编译错误 主包不能直接引用分包文件,请配置占位组件

uni-app项目编译成抖音小程序提示:抖音小程序提示编译错误 主包不能直接引用分包文件,请配置占位组件 minePages/m00bcdc0c.jsonat tuniao-ui/components/tn-waterfall/tn-waterfall.json解决办法:在 manifest.json -> mp-toutiao 添加属性 "scopedSlotsCompiler": "augmented""mp-toutiao": {     "scopedSlotsCompiler": "augmented"   }...

uniapp开发抖音小程序监听键盘弹起keyboardheightchange,并获取键盘高度

uniapp开发抖音小程序监听键盘弹起keyboardheightchange,并获取键盘高度

今天用 Uniapp 开发抖音小程序,有个核心需求:点击输入框时,键盘弹起后能自动 “顶起” 输入框,避免输入框被键盘遮挡。这就需要实时监听到键盘高度,再把高度设给输入框的样式 —— 说起来简单,实操时却踩了不少坑。一开始想当然用了 Uniapp 的onKeyBoardHeightChange API,结果在抖音端根本没反应。查了下才知道,抖音小程序压根不支持这个接口,白忙活一场。接着问 AI,得到的答案翻来覆去还是叫我用onKeyBoardHeightChange,看来它也没吃透抖音的特性。没办法,只能自己啃抖音小程序文档,还真发现 input 组件有个bindkeyboardheightchange事件,专门用来监听键盘高度变化 —— 本以为找到救星,结果直接用上去,事件死活不触发,又卡壳了。那阵子真有点想放弃,去 GitHub 和 Uniapp 插件市场翻了个遍,也没找到能直接获取抖音键盘高度的第三方库。最后抱着死马当活马医的心态,试了试在绑定bindkeyboardheightchange时,配合this.$nextTick延迟初始化 —— 没想到,成了!关键代码(templa...

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

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

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

完善棋牌台子出租,包升级维护等全包

完善棋牌台子出租,包升级维护等全包

完善棋牌台子出租,包升级维护等全包。包服务器+包维护+24小时在线解决+全部权限+单独服务器独立运营。完全独立的,你只负责经营你的就行,如果有问题或者需要做玩法调整可修改。效果演示视频:...

发表评论

访客

看不清,换一张

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