Qt-Installer-Framework使用二

2019/06/06 工具使用

上一篇文章记录了QIFW基本的使用,下面说说一些个性化配置功能.

打包结构说明

基本结构如下所示:

QIFW

主要包含两部分,configpackages.

config 目录主要放置一些打包软件的整体配置,比如打包后安装过程中显示的软件名称、版本号、公司名称、界面图标等等信息;

packages 目录主要配置每个安装组件的信息。组件化安装配置是 QIFW的一大特色,可以根据需求选择安装那些功能组件,这一点在我们安装 Qt 的时候很明显,可以选择安装 Qt的那些模块。 每个组件有自己的一些配置信息,以及组件之间可以有依赖关系,形象的展示为树状关系.

比如目前有2个版本需要根据系统版本来进行选择安装,64位程序时不能安装在32位机器上的,在安装时需要根据当前系统版本自行判断安装那个版本,64位机器可以安装32和64位软件,32位机器只能安装32复位软件, 否则无法运行。

config配置

一个简单的配置字段如下所示,XML都添加了注释说明:

<?xml version="1.0" encoding="UTF-8"?>
<Installer>
    <Name>Installer Demo</Name> 										<!-- 名称 -->
    <Version>1.0.0</Version>											<!-- 版本 -->
    <Title>Installer Demo one</Title>									<!-- 安装界面显示的标题 -->
    <Publisher>devstone</Publisher>										<!-- 所属公司,即公司名称 -->
	<ProductUrl>http://www.kevinlq.com</ProductUrl>						<!-- 软件URL地址 -->
	<InstallerWindowIcon>windowIcon</InstallerWindowIcon>				<!-- 安装界面Icon-->
	<InstallerApplicationIcon>windowIcon</InstallerApplicationIcon>		<!-- 打包后的exe图标-->
	<Logo>logo</Logo>
    <StartMenuDir>QIFWDemo</StartMenuDir>
    <TargetDir>C:/QIFWDemo</TargetDir>										<!-- 安装路径-->
	<RemoveTargetDirEnable>false</RemoveTargetDirEnable>					<!-- 安装路径是否可以自定义选择,如果为false则不能编辑(新添加字段) -->
	<WizardStyle>Modern</WizardStyle>										<!-- 安装向导页面的样式,Modern(现代),Mac,Aero,Classic(经典)-->
	<AllowSpaceInPath>false</AllowSpaceInPath>								<!-- 安装路径是否允许包含非ASCII字符-->
	<RepositorySettingsPageVisible>false</RepositorySettingsPageVisible>	<!-- 隐藏安装对话框中的 存储库设置页面-->
	<RunProgramDescription>这是一个安装Demo展示</RunProgramDescription>	<!-- 安装程序描述文本-->
	<MaintenanceToolName>SDKMaintenanceTool</MaintenanceToolName>
	<ComponentBtnEnable>false</ComponentBtnEnable>							<!-- 组件选择页面的选择按钮是否可以点击(新添加字段) -->
</Installer>

注意上述备注的新加字段,RemoveTargetDirEnableComponentBtnEnable 是我自定义的字段,如果直接从官方下载 exe进行打包,可能会发生找不到字段的错误,这2个字段可以通过修改源码进行编译。

路径: QIFW\src\libs\installer\constants.h

static const QLatin1String scRemoveTargetDirEnable("RemoveTargetDirEnable");    /// 组件安装路径是否能够编辑
static const QLatin1String scComponentBtnEnable("ComponentBtnEnable");          /// 组件选择页面三个按钮是否能够点击

初始化:

Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix, ParseMode parseMode)
{
	......
    if (!s.d->m_data.contains(scComponentBtnEnable))
        s.d->m_data.insert(scComponentBtnEnable, true);
	
	......
}
void ComponentSelectionPage::initializePage()
{
    /*! devstone add scRemoveTargetDirEnable [2019.06.14]*/
    bool bEnableSelect = packageManagerCore()->valueVariant(scComponentBtnEnable).toBool();
    d->setCompomentSelectEnable(bEnableSelect);

    PackageManagerPage::initializePage();
}

注:详细代码可以到我的 GitHub 主页去下载.

packages 配置

packages 目录包含了2部分内容,metadata(我们需要打包的一堆程序文件).

meta配置主要有一下几个(一般常用的就前2个):

  • installer.qs
  • package.xml
  • xxx.ui(自定义界面才需要)

installer.qs 文件其实就是一个 js 脚本文件,我们可以使用 js 对安装软件进行二次开发定制,可以控制某个安装向导页面是否显示,以及显示后执行那些操作,又或者添加新的 ui界面都可以通过 脚本进行控制.

通过脚本可以判断当前操作系统的类型,进而对安装的组件进行适配。

package.xml 可以配置每个组件的性质,比如版本、名字,是否默认,是否能够编辑.

<?xml version="1.0" encoding="UTF-8"?>
<Package>
    <DisplayName>x86-64 bit binaries</DisplayName>
    <Description>Binaries that require a x86-64 CPU.</Description>
    <Version>1.0.0-1</Version>
    <ReleaseDate>2014-12-01</ReleaseDate>
    <Default>false</Default>
	<CompomentsEnable>false</CompomentsEnable>		<!-- 组件是否可以编辑,即改变Checkbox(新添加字段) -->
</Package>

CompomentsEnable字段是自定义字段,可以控制某个组件是否能够手动点击取消或者选择.

安装界面

打包后的软件安装过程如下:

QIFW

QIFW

这里对安装路径进行了限制,不让用户修改,可以通过我新添加的字段进行配置,默认可以编辑.

如果没有配置该字段,默认可以编辑.
RemoveTargetDirEnable

QIFW

上面是根据当前系统版本进行了限制.

源码下载

参考文章


作者:鹅卵石
时间:  2019年06月15日22:54:35
版本:V 0.0.1
邮箱:kevinlq@163.com
版权:本博客若无特别声明,均属于作者原创文章,欢迎大家转载分享。但是,
希望您注明来源,并留下原文地址,这是对作者最大的尊重,也是对知识的尊重。

如果您对本文有任何问题,可以在下方留言,或者Email我.

捐赠

如果觉得分享的内容不错,可以请作者喝杯咖啡.


Show Disqus Comments

Search

    欢迎关注我的微信号

    一个不羁的码农

    不羁的程序员

    转载请注明出处!

    Table of Contents