打包发布Qt应用

参考我的学习项目:Release Qt App

里面有两个目录,分别是绿色版本和安装包版本。

Enigma Virtual Box

因为要用这个工具,就问了问AI了解了一下。

Enigma Virtual Box 是一个能把你的程序及其所有“配件”(DLL文件、图片、数据库等)打包成一个单独 .exe 文件的免费工具。

对 Qt 开发者来说,它的核心价值在于:解决了分发程序时必须带着一堆 DLL 文件的尴尬,让用户收到的只是一个清爽的、双击就能运行的单文件。

当用户运行这个打包后的程序时,它并不会像普通压缩包一样把文件解压到电脑的临时文件夹里,而是直接在内存中“虚拟”出这些文件。对程序来说,它“看到”的依赖都在,但对用户来说,磁盘上干干净净,没有任何临时文件被释放出来。这对于追求“绿色软件”体验的开发者来说,是一个巨大的吸引力。

但是它的加载方式并不是全量加载,而是动态的,所以对资源和性能的影响很小。

打包成绿色版本

有一篇博客写的好啊:QT程序打包发布详细步骤 - 程序员在路上(知乎)

注意:请先甄别自己使用的Qt版本,我使用的6.8.3版本,亲测可行,原文提到4.x版本是不行的。

下面简单记录一下原文章:

  1. 编译运行release版本应用;
  2. 将二进制包和资源文件复制到单独的目录下(比如resQtApp,注意目录结构);
  3. 在开始菜单中打开Qt命令行窗口(可能需要注意自己的编译环境,比如我是用Mingw编译的,用的就是 Qt 6.8.3(MinGW 13.1.0 64-bit));
  4. 补充:先试试 windeployqt --version 能不能执行(注意这里似乎不能tab补全,输入全名执行,以下操作都是如此),不行的话要先配置环境变量;
  5. 补充:运行Qt自带的配置环境变量的脚本 .\bin\qtenv2.bat
  6. 输入命令跳转到打包的文件夹:cd /d resQtApp,接着输入命令执行打包流程:windeployqt 程序名 (也可能是windeployqt6,暂时不清楚有何区别,我用的带6的),这样我们所需要的所有动态链接库和其他资源都会复制过来;
  7. 在上一步骤执行完命令就可以双击运行App了;
  8. 接下来使用 Enigma Virtual Box 打包App,只需要在 Input File Name 里选中我们之前处理好的.exe应用就好了,然后 Add -> Add Folder Recursive,选中.exe文件所在目录,然后 Files Option -> 勾选 Compress Files,最后点击 Process
  9. 上一步得到的打包文件(.exe)默认带有 _boxed 后缀,我们可以把这单个文件放在任意目录执行。

实际上在执行完第6步之后我们就可以把整个目录压缩发布了,但是打包成单个可执行文件对使用者来说更简洁干净,而且我亲测打包 Compress 之后可执行文件体积对比整个包小了近一半,可谓利远远大于弊。

打包成安装包程序(Setup.exe)

参考博客:使用NSIS打包程序 - 佳瑞Jarrett(知乎)

我们需要使用安装脚本制作安装包,首先需要按序安装:

NSIS脚本
HM NIS Edit

NSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 安装程序制作工具。它的特点是基于脚本、体积小巧、逻辑灵活且完全免费,非常适合用来打包软件并生成一个轻量级的 .exe 安装包。

常用编辑器是 HM NIS Edit。它是一个图形化的 IDE(集成开发环境),通过向导功能和语法高亮,帮助用户更直观地编写 NSIS 脚本,无需完全手动敲代码即可快速生成安装程序。

我们把App打包成安装包,有四样不可或缺的东西:

  1. 应用程序本体和完整的可执行环境;
  2. 安装.exe;
  3. 卸载.exe;
  4. 安装过程中显示的描述信息(License.txt)

为此,除了工具之外,我们还需要完成以下准备:

  1. 打包绿色版本的步骤1~7(准备好完整的可执行环境);
  2. 安装应用的ico图标;
  3. 卸载应用的ico图标;
  4. License.txt

准备好之后需要使用HM NIS Edit应用工具制作安装包。

  1. 运行HM NIS Edit(索引工具直接运行nisedit),选择文件->新建脚本向导,主要设置应用程序名称,可以任意写,其他的可以不用改;
  2. 下一步,设置安装程序的图标和语言(简体中文),如果没有语言选项可能是编译器配置路径错了,需要手动配置一下’NSIS’路径;
  3. 下一步,把授权文件改成自己准备好的License.txt
  4. 下一步,删除默认的文件列表,然后添加文件,先把所有安装包中非目录文件添加进来;
  5. 再次添加文件,选择 imageformats\qico.dll,注意路径,需要在 目的目录 后面加上 \imageformats
  6. 再次添加文件,选择 platforms\qwindows.dll,注意路径,需要在 目的目录 后面加上 \platforms
  7. 在已添加的文件列表中选择我们的可执行文件本体,选中之后选择下一步;
  8. 现在到了应用程序图标,基本不用设置,直接下一步;
  9. 修改自述,改成我们的License.txt作演示,到时候安装会出现这个文本信息;
  10. 下一步,设置卸载应用的图标;
  11. 现在到了向导已完成,把三个选项全都勾选上:保存脚本,转换文件路径到关键路径,编译脚本;
  12. 完成,选择保存文件夹,去报编译无误即可。

在我们最后选择的文件夹中会生成nsi脚本,编译没问题的话会生成Setup.exe,可以把这个安装文件单独发布,利用这个安装程序即可安装使用主体应用。