Qt Installer Framework4.6.1的最基础使用2(win10+在线安装包 )

 前言

前一文档简单记录了离线安装的制作方法,本文档记录下在线安装包的制作

笔者记录了一些关键要点,供有需要的小伙伴使用

一、安装Qt IFW

Qt官方已经提供了预编译库,若不想折腾的小伙伴,可以直接下载

Index of /official_releases/qt-installer-framework

笔者本次需要兼容win7系统,所以最高版本只能使用4.6.1,下载地址为:

https://download.qt.io/official_releases/qt-installer-framework/4.6.1/QtInstallerFramework-windows-x64-4.6.1.exe

若没有这方面需要,可以尝试下更高的版本,新版本增加了一部分新功能

当然喜欢从源码编译的,可以参考以下文档

Qt Installer Framework4.8.1的源码编译(win10+msvc2019-x64 )_编译qt install framework-优快云博客

Qt Installer Framework4.6.1的源码编译(win10+msvc2019-x64 )_编译qt install framework自定义关键字-优快云博客

 笔者建议,若非必要,直接使用官方预编译的版本就可以

二、发布程序

关于Qt程序的发布,可以参与如下文档

Qt程序发布(Qt6.2.2+MinGW11.2.0+win10)_mingw 11.2-优快云博客

无论使用哪个编译器,方法都是类似的,切记发布完成后,一定要在重新安装的原版系统上测试

很多小伙伴的机器上已经安装和各种库或组件,并设置了各种环境变量,而真正的用户可能并没有安装这些

三、创建或修改包目录

Qt IFW需要把文件放在特定的目录结构中

Deploy
        |- config
        |       |- config.xml
        |- packages
        |       |- com.vendor.product
        |       |       |- data
        |       |       |- meta
        |       |               |- installscript.qs
        |       |               |- license.txt
        |       |               |- package.xml
        |       |               |- page.ui
        |- packages_new
        |       |- com.vendor.product
                        |- data
                        |- meta
                                |- installscript.qs
                                |- license.txt
                                |- package.xml
                                |- page.ui

以上只是列出了部分,可能还需要其他的

为了示范,创建了packages和packages_new两个包位置,分别放置旧版本和新版本的文件

其实最简单的方法,就是从QtIFW目录下的examples\online直接复制一份,然后修改下就可以

1.修改config.xml文件

用于配置安装程序的基本行为,一般位于config目录中

典型配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<Installer>
    <Name>Your application</Name>
    <Version>1.0.0</Version>
    <Title>Your application Installer</Title>
    <Publisher>Your vendor</Publisher>
    <StartMenuDir>Super App</StartMenuDir>
    <TargetDir>@HomeDir@/InstallationDirectory</TargetDir>
    <RemoteRepositories>
        <Repository>
            <Url>http://localhost/repository</Url>
            <Enabled>1</Enabled>
            <Username>user</Username>
            <Password>password</Password>
            <DisplayName>Example repository</DisplayName>
        </Repository>
    </RemoteRepositories>
</Installer>

 部分含义如下 

元素描述
<Title>标题栏上的安装程序名称
<Name>被添加到页面名称和简介文本中的应用程序名称
<Version>程序的版本号
<Publisher>软件的发布者(如 Windows 控制面板中所示)
<StartMenuDir>Windows 开始菜单中产品的默认程序组名称
<TargetDir>程序安装的目标路径

最终,这些信息将被显示在介绍页面上:

 建议参考下官方的文档,位于QtIFW目录下的doc\html\ifw-globalconfig.html

2.修改package.xml文件

包目录下可以有多个组件,每个组件位于独立的目录中,单个组件目录下的meta目录,会存在package.xml文件,向安装程序提供有关组件的信息

本例中包目录为packages,其内只放置了一个组件com.vendor.product

以下为package.xml示例

<?xml version="1.0" encoding="UTF-8"?>
<Package>
    <DisplayName>The root component</DisplayName>
    <Description>Install this example.</Description>
    <Version>0.1.0-1</Version>
    <ReleaseDate>2010-09-21</ReleaseDate>
    <Licenses>
        <License name="Beer Public License Agreement" file="license.txt" />
    </Licenses>
    <Default>script</Default>
    <Script>installscript.qs</Script>
    <UserInterfaces>
        <UserInterface>page.ui</UserInterface>
    </UserInterfaces>
</Package>

其中,部分元素的含义如下所示:

元素描述
<DisplayName>组件的名称
<Description>组件的描述信息
<Version>组件的版本号(当有可用的版本时,用于推广更新,所以新的包中的版本号需要比旧版本号大)
<ReleaseDate>组件的发布日期
<Default>如果在安装程序中预先选择了组件,则为 true。
<Script>JavaScript 文件名,用于在加载时执行一些安装操作。

最终,这些信息将被显示在组件页面上:

建议参考下官方的文档,位于QtIFW目录下的doc\html\ifw-component-description.html

3.修改installscript.qs文件

这个脚本文件一般与package.xml文件在同一目录,可以做很多事,以下为部分片段

function Component()
{
    // 默认构造
}

Component.prototype.createOperations = function() {
    // 调用默认实现
    component.createOperations();

    // 添加开始菜单
    if (systemInfo.productType === "windows") {
        component.addOperation("CreateShortcut","@TargetDir@/bin/MyApp.exe","@StartMenuDir@/MyApp.lnk","workingDirectory=@TargetDir@");

component.addOperation("CreateShortcut","@TargetDir@/bin/MyApp.exe","@DesktopDir@/MyApp.lnk","workingDirectory=@TargetDir@");
    }
}

只是添加了开始菜单和桌面的快捷方式

具体内容比较多,建议多参考下官方的文档

4.修改license.txt文件

关于这个文件,不做解释

5.复制发布文件

将已经发布完成的文件,直接放入组件的data目录中,

本例中,假设packages\com.vendor.product\data目录存放上一次发布的内容,

packages\com.vendor.product\data目录存放最新发布的内容

等安装完成后,整个新发布目录会全部复制到安装目录中

建议根据实际的需要,查看QtIFW目录下的examples对应的示例,然后对应修改下

四、安装包生成与测试

1.若只是想创建一个在线安装包直接执行如下命令,生成完整的在线存储库

{dir}\QtIFW-4.6.1\bin\repogen.exe -p packages repository

命令的意思是,输入包目录为packages,生成的存储库放在目录repository中

之后直接将整个目录放到web后端的静态资源目录中即可

本例config.xml 文件中设置的是http://localhost/repository 

小伙伴可以根据需要修改成实际的地址,或自己起一个web服务,或直接使用本地Url

解决在线存储库后,需要生成在线安装包,直接执行如下命令

{dir}\QtIFW-4.6.1\bin\binarycreator.exe --online-only -c config\config.xml -p packages installer_online.exe

生成命令需要在包目录的根目录执行

需要说明一点的是,--online-only可以不加,此时会把包目录packages的内容生成到安装文件中,此时安装文件会比较大,但好处是,当在线库无法正常访问时,可以直接安装文件中的库版本,其他的功能不受影响

等会就可以得到安装包文件installer.exe,可以直接双击运行

若需要调试,可以执行installer.exe -v,把整个操作日志输出到控制台上

当然installer.exe -h可以查看所有支持的命令

2.若想在后期,在线更新新文件,可做如下处理

以本示例为例,可复制packages,重命令为packages_new,将新发布后的文件放入其中。

修改每个组件目录下的meta/package.xml文件,将Version标签的值修改比原来大一点

然后执行如下命令,生成新的存储库

{dir}\QtIFW-4.6.1\bin\repogen.exe -p packages_new repository

建议先删除原repository目录,再重新生成

若发布后的库很大,可以只生成增量的,执行如下命令

{dir}\QtIFW-4.6.1\bin\repogen.exe --update-new-components  -p packages_new repository

 注意repository目录需要存放之前的存储库

有个特殊情况,需要更新QtIFW的维护工具,建议参考下官方文档,这里不展开讨论

将生成的存储库直接替换原存储库即可

在用户端,直接启动维护程序,就可以看到需要更新的组件

 

 

后记

本次只是最基础的使用方法,基本满足一般用户使用。笔者建议,若需要在安装时执行更复杂的操作,可以考虑直接修改QtIFW的源码,实现起来更方便一些

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

꧁白杨树下꧂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值