名称: qt-installer-framework-config 描述: 配置Qt安装程序框架,用于跨平台安装程序,支持组件管理、在线更新和自定义界面 允许使用的工具: 读取、写入、编辑、Bash、Glob、Grep 标签: [qt, 安装程序, 部署, 分发, 打包]
Qt安装程序框架配置
配置Qt安装程序框架(IFW)以创建跨平台安装程序。此技能生成支持组件管理、在线更新、维护工具和自定义品牌的安装程序配置。
功能
- 生成安装程序配置文件
- 设置具有依赖关系的组件结构
- 配置在线更新仓库
- 自定义安装程序界面和品牌
- 设置维护工具配置
- 配置卸载程序行为
- 生成组件脚本
- 设置平台特定设置
输入模式
{
"类型": "对象",
"属性": {
"项目路径": {
"类型": "字符串",
"描述": "项目路径"
},
"安装程序名称": {
"类型": "字符串",
"描述": "安装程序名称"
},
"应用信息": {
"类型": "对象",
"属性": {
"名称": { "类型": "字符串" },
"版本": { "类型": "字符串" },
"发布者": { "类型": "字符串" },
"网址": { "类型": "字符串" }
},
"必需": ["名称", "版本", "发布者"]
},
"组件": {
"类型": "数组",
"项目": {
"类型": "对象",
"属性": {
"名称": { "类型": "字符串" },
"显示名称": { "类型": "字符串" },
"描述": { "类型": "字符串" },
"版本": { "类型": "字符串" },
"必需": { "类型": "布尔值" },
"依赖": { "类型": "数组" }
}
}
},
"在线仓库": {
"类型": "对象",
"属性": {
"启用": { "类型": "布尔值" },
"网址": { "类型": "字符串" }
}
},
"目标平台": {
"类型": "数组",
"项目": { "枚举": ["windows", "macos", "linux"] }
}
},
"必需": ["项目路径", "安装程序名称", "应用信息"]
}
输出模式
{
"类型": "对象",
"属性": {
"成功": { "类型": "布尔值" },
"结构": {
"类型": "对象",
"属性": {
"配置目录": { "类型": "字符串" },
"包目录": { "类型": "字符串" }
}
},
"构建命令": {
"类型": "对象",
"属性": {
"离线": { "类型": "字符串" },
"在线": { "类型": "字符串" },
"仓库": { "类型": "字符串" }
}
}
},
"必需": ["成功"]
}
目录结构
安装程序/
├── 配置/
│ ├── 配置.xml
│ ├── 控制器.qs
│ └── 样式.qss
├── 包/
│ ├── com.公司.应用/
│ │ ├── 元数据/
│ │ │ ├── 包.xml
│ │ │ ├── 安装脚本.qs
│ │ │ └── 许可证.txt
│ │ └── 数据/
│ │ └── [应用程序文件]
│ └── com.公司.应用.插件/
│ ├── 元数据/
│ │ └── 包.xml
│ └── 数据/
│ └── [插件文件]
└── 构建/
└── [生成的安装程序]
配置文件
配置.xml
<?xml version="1.0" encoding="UTF-8"?>
<安装程序>
<名称>我的应用程序</名称>
<版本>1.0.0</版本>
<标题>我的应用程序安装程序</标题>
<发布者>我的公司</发布者>
<开始菜单目录>我的应用程序</开始菜单目录>
<目标目录>@HomeDir@/我的应用程序</目标目录>
<!-- 界面自定义 -->
<向导样式>现代</向导样式>
<样式表>样式.qss</样式表>
<标题颜色>#2196F3</标题颜色>
<徽标>徽标.png</徽标>
<水印>水印.png</水印>
<横幅>横幅.png</横幅>
<!-- 行为 -->
<允许非ASCII字符>true</允许非ASCII字符>
<允许路径空格>true</允许路径空格>
<维护工具名称>维护工具</维护工具名称>
<!-- 在线更新 -->
<远程仓库>
<仓库>
<网址>https://更新.我的公司.com/仓库</网址>
<启用>1</启用>
</仓库>
</远程仓库>
<!-- 控制器脚本 -->
<控制脚本>控制器.qs</控制脚本>
</安装程序>
包.xml
<?xml version="1.0" encoding="UTF-8"?>
<包>
<显示名称>我的应用程序</显示名称>
<描述>主应用程序组件</描述>
<版本>1.0.0</版本>
<发布日期>2024-01-15</发布日期>
<名称>com.公司.应用</名称>
<依赖>com.公司.应用.运行时</依赖>
<默认>true</默认>
<必需>true</必需>
<强制安装>true</强制安装>
<!-- 平台特定 -->
<许可证>
<许可证 名称="最终用户许可协议" 文件="许可证.txt"/>
</许可证>
<脚本>安装脚本.qs</脚本>
</包>
安装脚本.qs
function 组件() {
// 构造函数
}
组件.prototype.创建操作 = function() {
组件.创建操作();
if (系统信息.产品类型 === "windows") {
// 创建开始菜单快捷方式
组件.添加操作("创建快捷方式",
"@目标目录@/我的应用.exe",
"@开始菜单目录@/我的应用程序.lnk",
"工作目录=@目标目录@",
"图标路径=@目标目录@/我的应用.exe",
"图标ID=0",
"描述=启动我的应用程序");
// 创建桌面快捷方式
组件.添加操作("创建快捷方式",
"@目标目录@/我的应用.exe",
"@桌面目录@/我的应用程序.lnk");
// 注册文件关联
组件.添加操作("注册文件类型",
"我的应用",
"@目标目录@/我的应用.exe '%1'",
"我的应用程序文件",
"text/x-我的应用",
"@目标目录@/我的应用.exe,0",
"程序ID=我的公司.我的应用");
}
if (系统信息.产品类型 === "osx") {
// macOS 特定操作
组件.添加操作("执行",
"/bin/ln", "-s",
"@目标目录@/我的应用.app",
"/应用程序/我的应用.app");
}
if (系统信息.产品类型 === "linux") {
// 创建 .desktop 文件
组件.添加操作("创建桌面条目",
"@目标目录@/我的应用.desktop",
"类型=应用程序
" +
"名称=我的应用程序
" +
"执行=@目标目录@/我的应用
" +
"图标=@目标目录@/我的应用.png
" +
"类别=实用工具;");
}
}
控制器.qs
function 控制器() {
安装程序.自动拒绝消息框();
安装程序.安装完成.连接(this, 控制器.prototype.安装完成页面回调);
}
控制器.prototype.介绍页面回调 = function() {
// 在无人值守模式下跳过介绍页面
if (安装程序.是无人值守()) {
界面.点击按钮(按钮.下一个按钮);
}
}
控制器.prototype.目标目录页面回调 = function() {
// 设置自定义目标目录
var 部件 = 界面.当前页面部件();
部件.目标目录行编辑.设置文本(安装程序.值("HomeDir") + "/我的应用");
}
控制器.prototype.组件选择页面回调 = function() {
// 预选组件
var 部件 = 界面.当前页面部件();
部件.全选();
}
控制器.prototype.许可协议页面回调 = function() {
界面.当前页面部件().接受许可单选按钮.设置选中(true);
}
控制器.prototype.安装完成页面回调 = function() {
// 安装后启动应用
if (安装程序.是安装程序() && 安装程序.状态 === Q安装程序.成功) {
var 部件 = 界面.当前页面部件();
if (部件.运行它复选框) {
部件.运行它复选框.设置选中(true);
}
}
}
构建命令
# 构建离线安装程序
二进制创建器 -c 配置/配置.xml -p 包 我的应用安装程序
# 构建在线安装程序(小型,下载组件)
二进制创建器 -c 配置/配置.xml -p 包 -n 我的应用在线安装程序
# 创建/更新仓库
仓库生成器 -p 包 仓库
# 更新现有仓库
仓库生成器 --更新新组件 -p 包 仓库
在线更新仓库
# 初始仓库创建
仓库生成器 -p 包 输出/仓库
# 上传到服务器
rsync -avz 输出/仓库/ 用户@服务器:/var/www/更新/
# 使用新版本更新
仓库生成器 --更新新组件 -p 包 输出/仓库
最佳实践
- 独立版本组件:允许细粒度更新
- 使用在线仓库:启用自动更新
- 自定义界面:匹配应用程序品牌
- 在所有平台上测试:验证安装程序行为
- 签名安装程序:代码签名以建立信任
- 包含维护工具:允许更新/卸载
相关技能
qt-cmake项目生成器- 构建系统设置自动更新系统流程 - 更新工作流windows认证码签名器- Windows签名macos公证工作流- macOS公证
相关代理
qt-cpp专家- Qt专业知识发布经理- 发布工作流