VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具

文章目录

  • [1. 安装 Microsoft Visual Studio Installer Projects 2022](#1. 安装 Microsoft Visual Studio Installer Projects 2022)
  • [2. 添加 Setup Project](#2. 添加 Setup Project)
  • [3. 在 File System 中添加相关文件及项目输出](#3. 在 File System 中添加相关文件及项目输出)
  • [4. Qt 部署](#4. Qt 部署)
  • [5. 生成桌面快捷方式](#5. 生成桌面快捷方式)
  • [6. 修改桌面快捷方式图标](#6. 修改桌面快捷方式图标)
  • 参考资料

本文适用情况为:已经通过 visual studio 平台开发并测试好了程序或软件,需要打包成 exe 文件部署到其他电脑之上。

本人所测试的开发项目背景是:

  • 开发平台:Visual Studio 2026
  • 开发语言:C++
  • 界面组件:Qt 6.11.1
  • 其他组件:VTK-9.6.2

1. 安装 Microsoft Visual Studio Installer Projects 2022

在 Visual Studio 顶部菜单栏找到 Extensions,依次点击 Extensions -> Manage Extensions 然后在弹出的搜索框搜索 installer 并点击 install。之后退出 Visual Studio,因为只有关闭 Visual Studio 才能进行功能的添加和修改。跟随弹出的小窗口操作即可。成功之后,再次重启 Visual Studio 即可。


Microsoft Visual Studio Installer Projects 2022 是微软为 Visual Studio 2022 提供的一款扩展插件,专门用于将开发好的桌面应用程序打包成标准的安装程序(如 .msi 或 Setup.exe 文件)。

主要功能和作用:

  • 创建安装包:能把你的 C#、VB.NET 等桌面程序(如 WinForms、WPF 项目)以及相关的类库、资源文件打包在一起。
  • 生成标准格式:支持生成 .msi(Windows Installer)或传统安装执行文件,方便分发给用户在 Windows 系统上安装。
  • 配置安装环境:
    • 可以设置桌面快捷方式、开始菜单图标。
    • 可以配置注册表项、文件关联等系统设置。
    • 可以检测并自动引导安装依赖项(例如 .NET Framework 环境)。

适用场景:当你开发完一个 Windows 桌面软件,需要发给客户或发布到网上,让普通用户通过类似"下一步、下一步"的图形界面来安装,而不是简单地把一堆 .dll 和 .exe 压缩包发给对方时,就可以使用这个工具。

2. 添加 Setup Project

刚才安装的 Microsoft Visual Studio Installer Projects 是扩展工具;接下来利用这个工具创建安装包项目 Setup Project,这个安装包项目才是用来把我们的工程可执行文件 setup.exe、.dll 和相关资源文件打包成 .msi 或 setup.exe 文件的。

这里我们假定你的工程名字为 XYZ。接下来右键你的工程 Solution 'XYZ' 然后依次选择 Add -> New Project 在搜索框搜索 setup 然后选择 Setup Project 一直下一步即可。

之后我们便得到了用来打包我们的 XYZ 工程的 File System 编辑器,这是用来决定安装时把文件放到目标电脑的哪些位置。

  • Application Folder(应用程序文件夹):程序的安装目录。通常把 XYZ.exe、Qt/VTK DLL,以及程序运行需要的资源文件放这里。
  • User's Desktop(用户桌面):放桌面快捷方式。一般添加一个指向 XYZ.exe 的快捷方式。
  • User's Programs Menu(用户开始菜单):放开始菜单快捷方式。也可以在这里建一个程序文件夹,再放快捷方式。

现在看到的这三个是安装位置分类,不代表里面已经有程序文件。

3. 在 File System 中添加相关文件及项目输出

右键 Application Folder 然后选择 Add → Project Output...,添加 XYZ 的 Primary Output。随后把需要随程序安装的 DLL 和资源也加入这里。

然后右键 Setup Project(默认名字为 Setup1),点击 build,即可在文件夹中看到生成的 setup.exe 和 Setup1.msi 文件,将这两个文件发送到待安装电脑,运行 setup.exe 即可。

如果没有其他特别的要求,以上就是核心打包流程了。

再往之后的内容就是根据不同的需求,以及不同的工程文件类型,所独有的一些操作了。


Add Project Output Group(添加项目输出组)窗口。它决定从 XYZ 项目里,把哪一类生成文件加入安装包。

选项 包含什么 通常怎么用
Primary Output 项目生成的主程序 .exe 或 .dll 必选。你的应用通常选这个
Resource Satellite DLLs 按语言生成的本地化资源 DLL 只有程序使用这类资源 DLL 时才选;不确定时先不加
Debug Symbols 调试符号文件,通常是 .pdb 正式安装包通常不需要;排查崩溃时可另行保留
Content Files 项目中标记为 Content 的文件 只有项目把需要的文件正确标记为 Content 时才选;仍要检查是否包含了运行所需资源
Source Files 源代码文件 通常不应放进给用户安装的程序包
Documentation Files 项目文档文件 需要随程序提供说明文档时再选

4. Qt 部署

因为我开发的工程还用到了 Qt,所以需要进行 Qt 部署。如果待打包的工程没有用到 Qt,则可以跳过这一步。

Qt 的部署采用 windeployqt,这里需要注意命令提示符工具的版本匹配问题,例如有 MSVC 和 MinGW,具体可以在你的 visual studio 工程查到,路径为 Extension -> Qt VS Tools -> Qt Versions.

确认命令提示符的版本后,打开并运行如下指令:

bash 复制代码
windeployqt --release "D:\Deploy\XYZ.exe"

这一步会借助 windeployqt 工具找寻相关的 Qt 组件,并将其复制到你的 XYZ.exe 文件夹下。

这里的所有内容都是需要复制到步骤 3 中的 Application Folder,且注意要保持同样的文件结构。

5. 生成桌面快捷方式

如果想要安装后的程序自动创建桌面快捷方式,那需要先定位步骤 3 的 Application Folder,然后在其中找到主输出 Shortcut to %sPrimary Output from JawDynamics (Active) 之后右键选择 Create Shortcut to Primary Output from XYZ ...,然后就会得到默认文字为 Shortcut to %sPrimary Output from XYZ ... 的快捷方式。

将得到的快捷方式移动到 User's Desktop 文件夹下,同时可以修改这个快捷方式的名字。

之后再次 Build 就可以了。

6. 修改桌面快捷方式图标

确认手里有真正的 .ico 文件;PNG 图片不能直接当快捷方式图标用。

在 Setup1 的 Application Folder 里用 Add → File... 加入这个 .ico 文件。

选中 User's Desktop 里的快捷方式,右键按打开 Properties Window。然后点 Icon 这一行的 (Icon),在弹窗里选择刚加入项目的 .ico 文件并确认。

注意别只选中 Icon 这一行就关闭窗口。重新生成 Setup1。在测试电脑上卸载旧版本后安装新包,再看桌面图标。

参考资料

  1. C++程序打包生成EXE------以VS2019为例
  2. 五分钟教会你vs程序打包,全程无废话
相关推荐
学逆向的2 小时前
C 局部静态变量
c语言·开发语言·网络安全
小徐不徐说2 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
大都督会赢的2 小时前
C++第一节课
开发语言·c++
UIU1142 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
“AI国潮设计-小江”2 小时前
【AIGC实战】Python+Stable Diffusion打造“英歌舞财神”IP,解锁“马到成功”等爆款情绪营销文案设计
开发语言·人工智能·python·prompt·aigc
小王C语言3 小时前
Qt常用控件:容器类控件,标题分组框、标签页(浏览器标签)
开发语言·qt
TMedical3 小时前
MedPlanning 截骨模拟矫形功能
c++·图像处理·人工智能·qt·健康医疗
我是唐青枫3 小时前
Kotlin Delegation 委托详解
开发语言·kotlin
qq_406981033 小时前
共享变量一 关于extern与const
开发语言·c++