1,QtIFW 简介
Qt IFW(Qt Installer Framework 的简称 ),是由 Qt 官方提供的安装程序制作框架。进入Qt IFW的官方下载页,选择一个合适版本,这里选择版本号为4.5.0的windows版本进行安装。
官方下载地址:https://download.qt.io/official_releases/qt-installer-framework/
本文会在Windows上基于Qt IFW进行程序安装包程序制作,包括常用的离线安装包和在线更新包的生成和验证都会详细介绍。使用Qt IFW制作安装包默认您已经准备好了完整的程序包(windeployqt或者其它工具生成)。
2,环境配置
添加到Qt Creator帮助文档
打开 Qt Creator,选择【工具】–>【选项】–>【帮助】–>【文档】–>【添加】
选择Qt IFW安装目录doc下的ifw.qch文件。
4.5.0安装目录下没有qch文件,此步骤可以跳过。
配置Windows环境变量
Windows下使用binarycreator作为打包工具,必须把binarycreator工具所在的bin目录导入的环境变量Path中。
3,Qt IFW的使用
构建Example
直接Qt构建examples.pro可查看各个例子安装效果
制作安装包至少应包含config/、packages/两个目录
4,离线安装
创建配置文件
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
<Name>UDS_Updata</Name>
<Version>1.0.0</Version>
<Title>UDS_Updata Installer</Title>
<Publisher>nealwang</Publisher>
<StartMenuDir>UDS_Updata</StartMenuDir>
<TargetDir>@ApplicationsDir@/UDS_Updata</TargetDir>
</Installer>
配置文件指定如下信息:
-
< Title > 标题栏上安装程序名称
-
< Name > 显示在安装页面上应用程序的名称
-
< Version > 应用程序的版本号
-
< Publisher > 软件发布者
-
< StartMenuDir > 添加到开始菜单默认程序组名称
-
< TargetDir > 应用程序的安装目录
创建包信息文件
<?xml version="1.0" encoding="UTF-8"?>
<Package>
<DisplayName>UDS_Updata</DisplayName>
<Description>This is a demo for Qt IFW </Description>
<Version>1.0.0-1</Version>
<ReleaseDate>2023-10-19</ReleaseDate>
<Default>true</Default>
<Script>installscript.qs</Script>
<Licenses>
<License name="Public License Agreement" file="license.txt" />
</Licenses>
</Package>
各个元素含义如下:
-
< DisplayName > 指定组件的名称
-
< Description > 显示选中组件的描述信息
-
< Version > 组件的版本号信息,可用作后期版本更新
-
< ReleaseDate > 组件发布的日期
-
< Default > 安装过程中组件是否默认选中,true表示默认选中,false默认补选中。
-
< Script > JavaScript文件名,执行一些个性化的安装操作
-
< Licenses > 添加许可文件
自定义安装
通过在installscript.qs文件中添加如下内容,分别添加应用程序到开始菜单快捷方式和桌面快捷方式。
function Component()
{
gui.pageWidgetByObjectName("LicenseAgreementPage").entered.connect(changeLicenseLabels);
}
changeLicenseLabels = function()
{
page = gui.pageWidgetByObjectName("LicenseAgreementPage");page.AcceptLicenseLabel.setText("Yes I do!");page.RejectLicenseLabel.setText("No I don't!");
}
Component.prototype.createOperations = function()
{
// 调用默认实现
component.createOperations();
if (systemInfo.productType === "windows")
{
// 添加桌面快捷方式
component.addOperation("CreateShortcut","@TargetDir@/UDS_Updata.exe","@DesktopDir@/UDS_Updata.lnk","workingDirectory=@TargetDir@");
//添加开始菜单快捷方式
component.addOperation("CreateShortcut","@TargetDir@/UDS_Updata.exe","@StartMenuDir@/UDS_Updata.lnk","workingDirectory=@TargetDir@");
}
}
准备打包文件
将提前准备好的程序(*.exe、*.dll等文件),确认可以正常运行。
开始打包
执行如下命令
binarycreator -c config\config.xml -p packages UDS_updateInstaller -v
5,验证测试安装包
双击生成安装包一路next即可,部分截图如下。
离线打包安装到此结束!
6,在线安装
生成基础安装包
binarycreator --online-only -c config/config.xml -p packages installer.exe
创建初版存储库
repogen -p packages repository
安装基础安装包
7,此过程若使用Gitee做存储库可能会出现异常,详见异常问题汇总
创建新版本存储库
repogen --update-new-components -p packages_update3.2 repository
使用安装包中maintenancetool安装更新
异常问题汇总
异常1
使用Gitee做资源库时较大文件无法下载,提示协议未知;
暂无解决办法,需切换成其它资源库。
建议使用github存储库或者自建http服务。笔者使用python自带的httpserver进行测试。
github需要修改hosts或者梯子,请自行选择。
异常2
安装目录存在且包含安装程序,这就涉及到自动卸载旧版本或者覆盖安装问题。
8,总结
QtIFW比较灵活支持离线或在线安装程序,或两者兼而有之,具体取决于您的使用案例。支持资源库、样式表、窗口等的定制化操作。
实操内容已上传Github,感兴趣请移步,欢迎大佬批评指正。后续会持续更新完善
https://github.com/nealwang123/QtIFWOnline.git
链接:https://www.jianshu.com/p/8f24dec6327d