使用Qt installer framework制作安装包

一、介绍

使用Qt库开发的应用程序,一般有两种发布方式:(1)静态编译发布。这种方式使得程序在编译的时候会将Qt核心库全部编译到一个可执行文件中。其优势是简单单一,所有的依赖库都集中在一起,其缺点也很明显,可执行程序体量较大,光Qt核心库加起来就得十多兆。(2)制作安装包发布。这种方式的原理也简单,就是将可执行程序和其依赖的库文件一起打包压缩,制作成安装包发布。制作安装包的工具挺多,今天要说的是Qt官方的安装包制作框架Qt installer framework.这个框架由Qt官方出品,广泛应用于Qt library, Qt Creator等安装包产品。网上搜了一下,相关教程貌似不多。

二、配置使用

下载并安装好Qt installer framework之后,需要创建目标文件夹。所有需要打包的文件都放到这个文件夹下。我的文件夹内容如下:

然后我们需要安装如下的目录组织结构分别创建文件夹,注意的是,一定要安装这样的顺序组织文件夹哦。最简单的方法是从Qt installer framework安装目录下的examples里面复制一个出来,在此基础上进行修改:

我创建的根文件夹名称为sc.在sc下面又创建了两个子文件夹:config和packages。在config文件夹下创建一个config.xml文件,该文件用于定制安装包的UI和行为,其基本格式如下:

<?xml version="1.0"?>
<Installer>
    <Name>Some Application</Name>
    <Version>1.0.0</Version>
    <Title>Some Application Setup</Title>
    <Publisher>Your Company</Publisher>
    <ProductUrl>http://www.your-fantastic-company.com</ProductUrl>
    <InstallerWindowIcon>installericon</InstallerWindowIcon>
    <InstallerApplicationIcon>installericon</InstallerApplicationIcon>
    <Logo>logo.png</Logo>
    <Watermark>watermark.png</Watermark>
    <RunProgram></RunProgram>
    <RunProgramArguments></RunProgramArguments>
    <RunProgramDescription></RunProgramDescription>
    <StartMenuDir>Some Application Entry Dir</StartMenuDir>
    <UninstallerName>SDKMaintenanceTool</UninstallerName>
    <AllowNonAsciiCharacters>true</AllowNonAsciiCharacters>
    <Background>background.png</Background>

    <TargetDir>@[email protected]/testinstall</TargetDir>
    <AdminTargetDir>@[email protected]/testinstall</AdminTargetDir>
    <RemoteRepositories>
        <Repository>
            <Url>http://www.your-repo-location/packages/</Url>
        </Repository>
    </RemoteRepositories>
</Installer>

其中,name和version子元素是必需的,其他子元素则是可选的,并且顺序可以任意。关于这些配置项的含义,在官方网站的链接上可以查看

在上面的图中我们可以看到,我们创建名为org.hust.simulator的文件夹。事实上,Qt installer framework引入了组件的概念。即每一个独立模块可以单独放在一个组件component中,对于大型程序这样清晰的结构有利于工程组织,降低复杂度。例子中比较简单,只使用了一个组件,根据需要可以创建多个组件:

packages
    - com.vendor.root
        - data
        - meta
    - com.vendor.root.component1
        - data
        - meta
    - com.vendor.root.component1.subcomponent1
        - data
        - meta
    - com.vendor.root.component2
        - data
        - meta

  可以注意到,在packages文件夹下每个组件都需要创建两个子文件夹meta和data。meta目录下用于存放一些配置文件,用于指定安装和部署过程。在meta文件夹中至少需要一个package.xml及所有在该文件中引用到的资源文件,如脚本文件、界面资源、翻译文件等。package.xml文件描述了一个组件的基本信息,其格式如下:

<?xml version="1.0"?>
<Package>
    <DisplayName>QtGui</DisplayName>
    <Description>Qt gui libraries</Description>
    <Description xml:lang="de_de">Qt GUI Bibliotheken</Description>
    <Version>1.2.3</Version>
    <ReleaseDate>2009-04-23</ReleaseDate>
    <Name>com.vendor.root.component2</Name>
    <Dependencies>com.vendor.root.component1</Dependencies>
    <Virtual>false</Virtual>
    <Licenses>
        <License name="License Agreement" file="license.txt" />
    </Licenses>
    <Script>installscript.qs</Script>
    <UserInterfaces>
        <UserInterface>specialpage.ui</UserInterface>
        <UserInterface>errorpage.ui</UserInterface>
    </UserInterfaces>
    <Translations>
        <Translation>sv_se.qm</Translation>
        <Translation>de_de.qm</Translation>
    </Translations>
    <DownloadableArchives>component2.7z, component2a.7z</DownloadableArchives>
    <AutoDependOn>com.vendor.root.component3</AutoDependOn>
    <SortingPriority>123</SortingPriority>
    <UpdateText>This changed compared to the last release</UpdateText>
    <Default>false</Default>
    <ForcedInstallation>false</ForcedInstallation>
    <Essential>false</Essential>
    <Replaces>com.vendor.root.component2old</Replaces>
</Package>

  其中License节中指定了协议条款,file属性指定了协议条款所在的文件。UserInterfaces和Translations节分别指定了界面资源文件和翻译文件。Script节指定了脚本文件,在脚本文件中可以对安装过程进行更为详细的定制。样例中其他元素名称及值都比较容易懂,对着修改并不困难。全部选项可以上官网查看

data文件夹中则用于存放我们实际需要打包的程序文件(*.dll, *.exe等),Qt installer framework在制作过程中用archivegen会将这些文件压缩成7zip格式。安装过程中自动从压缩包中提取出数据文件。最后我的文件组织结构如下:

为了方便,我将这个sc文件夹直接拖到了Qt installer framework的安装目录下,这样就可以在命令行下直接使用binarycreator.exe这个工具了。准备工作完成,开始生成安装包:

binarycreator.exe -c sc\config\config.xml -p sc\packages my_installer.exe -v

  命令运行完成,将在binarycreator.exe所在目录下生成my_installer.exe文件。运行起来看看:

三、小结

从上面看整个配置过程还算是挺简单的,官方手册也很齐全。不得不感叹文档健全就是好啊。以前都是使用其他的工具制作安装包,这次尝试了一下Qt installer framework制作安装包还算满意。

参考

时间: 2024-08-09 09:57:16

使用Qt installer framework制作安装包的相关文章

使用Qt installer framework制作安装包(不知道是否适合Mac和Linux?)

一.介绍 使用Qt库开发的应用程序,一般有两种发布方式:(1)静态编译发布.这种方式使得程序在编译的时候会将Qt核心库全部编译到一个可执行文件中.其优势是简单单一,所有的依赖库都集中在一起,其缺点也很明显,可执行程序体量较大,光Qt核心库加起来就得十多兆.(2)制作安装包发布.这种方式的原理也简单,就是将可执行程序和其依赖的库文件一起打包压缩,制作成安装包发布.制作安装包的工具挺多,今天要说的是Qt官方的安装包制作框架Qt installer framework.这个框架由Qt官方出品,广泛应用

Qt Installer Framework的学习(二)

Qt Installer Framework的学习(二) Qt Installer Framework的一些操作可以使用最常见的Qt项目来表示,也就是说,书写pro文件,使用qmake运行之,除了能够编译正常的项目之外,也可以为项目打包.这里最重要的就是binarycreator了.下面就是我命令行使用binarycreator的时候弹出的一些提示,我们可以根据这样的提示,来了解究竟有哪些使用的方法. 上海萌梦信息科技有限公司(微博:http://weibo.com/qtdream)原创文章,首

Qt Installer Framework的学习

Qt Installer Framework是Qt默认包的发布框架.它很方便,使用静态编译Qt制作而成.并且使用了压缩率很高的7z对组件进行压缩.之所以有这些好处,我才觉得值得花一点儿精力研究一下这个框架.从Qt的下载地址中下载Qt Installer Framework,地址是:http://download.qt.io/official_releases/qt-installer-framework/2.0.1/ .下载好了之后点击安装,会将程序以及一些实例安装进来.Qt Installer

Qt Installer Framework的学习(三)

Qt Installer Framework的学习(三) Qt Installer Framework的样例中.通常是这种:config目录一般放了一个config.xml文件,包括的是安装配置xml的内容.packages包括的是须要安装的包的内容.普通情况不止一个安装包,每个安装包也不止是一个文件,那么每个包都有目录,里面的目录中有data以及meta子目录. data目录中是安装包的内容,meta目录中是package.xml文件.这个文件包括的是安装包的安装配置内容.另一些项目包括的是p

Qt Installer Framework翻译(7-8)

C++ API C ++ API文档是为开发Qt Installer Framework的开发人员编写的. 它描述了内部API,因此没有兼容性保证. 此外,该文档尚在开发中,因此缺少部分内容,而其他部分可能已过时. 要创建自定义的安装程序,请改用Scripting API. 有关更多信息,请参见自定义安装程序章节. 命名空间 命名空间 描述 QInstaller 包含用于实现Qt Installer Framework和安装程序UI核心功能的类. KDUpdater 包含用于自动检测应用程序更新

为自己编写的windows应用程序制作安装包

1 写好了一个windows程序之后如何制作安装包 这个在vs中就可以直接发布了,可以制作msi的安装包和exe的安装包. 2 window应用程序安装包做了哪些事情 rpm安装包的话,只是把相应的文件拷贝到不同的目录.那么window安装包做了什么呢? msi里面有一个table,里面是一条条的指令,windows installer会解释并执行这些指令. 它还是会把安装包里面的文件拷贝到相应的目录.关键是它除了拷贝还做了哪些事情呢? 3 安装包除了把相应的文件放到不同的目录下,还做了哪些事情

InstallShield 12 制作安装包

目  录 一.       InstallShield安装... 2 二.       InstallShield 破解... 2 三.       制作安装包... 2 (一) 打开project... 2 (二) project助手页面... 3 1.Application Information:程序信息... 4 2.Installation Architecture: 安装包结构... 4 3.Application Files:指定安装的文件默认目标路径... 5 4.Applica

Qt Installer Framework Manual 问题之一

出现错误:This application failed to start because it could not find or load the Qt platform plugin 在使用 windeployqt 打包程序之后,然后使用 binarycreator 生成安装程序的过程中,要保证安装之后的目录结构和 打包程序的目录结构一致,否则也可能会出现如上所述错误,导致程序无法正常运行. 方法是: 1. 如果打包的目录中你看到的是一个文件夹,把这个文件夹看作是一个模块,直接放入 dat

java程序打包jre以及制作安装包

分享一篇文章: java程序打包jre以及制作安装包 传智&黑马咨询郑老师 java程序打包jre以及制作安装包Java的桌面程序写好以后只能在eclipse下运行是不可以的,还需要将程序拷贝到其他电脑上运行才可以,所以需要制作成其他电脑可以运行的文件,当然在安装有jdk的电脑上只需要将程序导出为jar文件就可以运行了,但是除了开发java程序人员的电脑上会安装jdk,其他人的电脑上不会有这个环境,所以还需要将java可运行的环境一同打包到程序中去,这样,在用户不安装jdk的情况下也可以运行.制