QtIFW 簡(jiǎn)介
Qt IFW(Qt Installer Framework 的簡(jiǎn)稱(chēng) ),是由 Qt 官方提供的安裝程序制作框架抓谴。進(jìn)入Qt IFW的官方下載頁(yè)钧椰,選擇一個(gè)合適版本蛛壳,這里選擇版本號(hào)為4.5.0的windows版本進(jìn)行安裝杏瞻。
官方下載地址:https://download.qt.io/official_releases/qt-installer-framework/
本文會(huì)在Windows上基于Qt IFW進(jìn)行程序安裝包程序制作,包括常用的離線安裝包和在線更新包的生成和驗(yàn)證都會(huì)詳細(xì)介紹衙荐。使用Qt IFW制作安裝包默認(rèn)您已經(jīng)準(zhǔn)備好了完整的程序包(windeployqt或者其它工具生成)捞挥。
環(huán)境配置
添加到Qt Creator幫助文檔
打開(kāi) Qt Creator,選擇【工具】–>【選項(xiàng)】–>【幫助】–>【文檔】–>【添加】
選擇Qt IFW安裝目錄doc下的ifw.qch文件忧吟。
4.5.0安裝目錄下沒(méi)有qch文件树肃,此步驟可以跳過(guò)。
配置Windows環(huán)境變量
Windows下使用binarycreator作為打包工具瀑罗,必須把binarycreator工具所在的bin目錄導(dǎo)入的環(huán)境變量Path中胸嘴。
Qt IFW的使用
構(gòu)建Example
直接Qt構(gòu)建examples.pro可查看各個(gè)例子安裝效果
制作安裝包至少應(yīng)包含config/雏掠、packages/兩個(gè)目錄
離線安裝
創(chuàng)建配置文件
<?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 > 標(biāo)題欄上安裝程序名稱(chēng)
< Name > 顯示在安裝頁(yè)面上應(yīng)用程序的名稱(chēng)
< Version > 應(yīng)用程序的版本號(hào)
< Publisher > 軟件發(fā)布者
< StartMenuDir > 添加到開(kāi)始菜單默認(rèn)程序組名稱(chēng)
< TargetDir > 應(yīng)用程序的安裝目錄
創(chuàng)建包信息文件
<?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>
各個(gè)元素含義如下:
< DisplayName > 指定組件的名稱(chēng)
< Description > 顯示選中組件的描述信息
< Version > 組件的版本號(hào)信息,可用作后期版本更新
< ReleaseDate > 組件發(fā)布的日期
< Default > 安裝過(guò)程中組件是否默認(rèn)選中劣像,true表示默認(rèn)選中乡话,false默認(rèn)補(bǔ)選中。
< Script > JavaScript文件名耳奕,執(zhí)行一些個(gè)性化的安裝操作
< Licenses > 添加許可文件
自定義安裝
通過(guò)在installscript.qs文件中添加如下內(nèi)容绑青,分別添加應(yīng)用程序到開(kāi)始菜單快捷方式和桌面快捷方式。
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() { ??//?調(diào)用默認(rèn)實(shí)現(xiàn) ??component.createOperations(); ??if?(systemInfo.productType?===?"windows")? ??{ ?? //?添加桌面快捷方式 ?? component.addOperation("CreateShortcut","@TargetDir@/UDS_Updata.exe","@DesktopDir@/UDS_Updata.lnk","workingDirectory=@TargetDir@"); ?? //添加開(kāi)始菜單快捷方式 ?? component.addOperation("CreateShortcut","@TargetDir@/UDS_Updata.exe","@StartMenuDir@/UDS_Updata.lnk","workingDirectory=@TargetDir@"); ??} }
準(zhǔn)備打包文件
將提前準(zhǔn)備好的程序(*.exe屋群、*.dll等文件)
開(kāi)始打包
執(zhí)行如下命令
binarycreator?-c?config\config.xml?-p?packages?UDS_updateInstaller?-v
驗(yàn)證測(cè)試安裝包
雙擊生成安裝包一路next即可闸婴,部分截圖如下。
在線安裝
生成基礎(chǔ)安裝包
binarycreator --online-only -c config/config.xml -p packages installer.exe
創(chuàng)建初版存儲(chǔ)庫(kù)
repogen ?-p packages repository
安裝基礎(chǔ)安裝包
此過(guò)程若使用Gitee做存儲(chǔ)庫(kù)可能會(huì)出現(xiàn)異常芍躏,詳見(jiàn)異常問(wèn)題匯總
創(chuàng)建新版本存儲(chǔ)庫(kù)
repogen --update-new-components -p packages_update3.2 repository
使用安裝包中maintenancetool安裝更新
異常問(wèn)題匯總
異常1
使用Gitee做資源庫(kù)時(shí)較大文件無(wú)法下載邪乍,提示協(xié)議未知;
暫無(wú)解決辦法对竣,需切換成其它資源庫(kù)庇楞。
建議使用github存儲(chǔ)庫(kù)或者自建http服務(wù)。筆者使用python自帶的httpserver進(jìn)行測(cè)試否纬。
github需要修改hosts或者梯子吕晌,請(qǐng)自行選擇。
異常2
安裝目錄存在且包含安裝程序临燃,這就涉及到自動(dòng)卸載舊版本或者覆蓋安裝問(wèn)題睛驳。
總結(jié)
QtIFW比較靈活支持離線或在線安裝程序,或兩者兼而有之膜廊,具體取決于您的使用案例柏靶。支持資源庫(kù)、樣式表溃论、窗口等的定制化操作。
實(shí)操內(nèi)容已上傳Github,感興趣請(qǐng)移步痘昌,歡迎大佬批評(píng)指正钥勋。后續(xù)會(huì)持續(xù)更新完善
https://github.com/nealwang123/QtIFWOnline.git