包目录

安装程序包含的组件要么是内嵌在安装程序中,要么从远程存储库中加载。在两种情况下,都需要使用安装程序可以读取的文件格式和结构来表示这些组件。

包目录结构

将所有组件放置在同一个根目录中,该目录称为包目录。目录名充当类似的域名标识符,用于标识所有组件。例如,com.vendor.root。目录名不能包含:-字符,因为它们保留用于从标识符中分隔版本号。

在根目录内,创建名为datameta的子目录。

包目录可以如下所示

-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

元数据目录

meta目录包含指定部署和安装过程设置的文件。这些文件不会被安装程序提取。目录必须包含至少一个包信息文件,以及包信息文件中引用的所有文件,例如脚本、用户界面文件和翻译。

包信息文件语法

包.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>
    <ForcedUpdate>false</ForcedUpdate>
    <Essential>false</Essential>
    <Replaces>com.vendor.root.component2old</Replaces>
    <Operations>
        <Operation name="AppendFile">
            <Argument>@TargetDir@/A.txt</Argument>
            <Argument>lorem ipsum</Argument>
        </Operation>
        <Operation name="Extract">
            <Argument>@TargetDir@/Folder1</Argument>
            <Argument>content.7z</Argument>
        </Operation>
        <Operation name="Extract">
            <Argument>@TargetDir@/Folder2</Argument>
        </Operation>
    </Operations>
    <TreeName moveChildren="true">com.vendor.subcomponent</TreeName>
</Package>

包信息文件元素摘要

元素描述
DisplayName组件的易读名称。必需。指定组件名称的翻译作为额外的DisplayName标签的值,并通过设置xml:lang属性为正确的区域设置来指定。
描述组件的易读描述。必需。可以类似地指定Date的翻译,类似于DisplayName标签。如果找不到匹配区域的本地化,并且存在未翻译的版本,则将使用该未翻译版本。否则,该区域将不会显示任何Description。可以在组件描述中包含用户可点击的外部链接,例如组件的首页,通过指定如下的URL地址:{external-link}='https://www.qt.io/'。URL必须有效,并且包含对所需资源的完整路径。
Version组件版本号,以下格式:[0-9]+((\.|-)[0-9]+)*,例如1-1;1.2-2;3.4.7。必需。如果包需要显示从子包中继承的版本号(而不是它自己的版本号)(因为子包的组合),则可以指定继承版本自属性inheritVersionFrom以及需要从其中继承版本号的包名。
ReleaseDate此组件版本发布日期。必需。
Name组件的类似域标识符。必需。
Dependencies该组件所依赖的组件标识符的逗号分隔列表。可选项,您可以通过破折号(-)指定版本号。您可以使用比较运算符(=, >, <, >= 或 <=)作为版本号的前缀。请注意,您必须使用字符引用 "&lt;" 来转义左尖括号(使用 "&lt;" 代替 "<",并使用 "&lt;=" 代替 "<=")。可选。有关更多信息,请参阅组件依赖
AutoDependOn该组件自动依赖的组件标识符的逗号分隔列表。只有当所有指定的依赖项都满足时,才会安装该组件。如果组件具有对其他组件的自动依赖,则组件树中不会显示与该组件相邻的复选框,但这不会改变更新器视图中复选框的可见性,因为最终用户仍然可以手动选择该组件进行更新。

在运行包管理器模式下的安装程序或维护工具时,选择将自动进行。如果组件之前未安装,只有在从这个列表中选择所有组件安装时,才会选择此组件进行安装。如果组件已经安装,当至少有一个列表中的组件也选择进行卸载或更新时,才会选择此组件进行卸载或更新。有关更多信息,请参阅组件依赖

虚拟设置为 true 以隐藏安装程序中的组件。这将隐藏该组件可能拥有的任何子组件,包括其子孙组件。注意,在根组件上设置此选项不起作用。
SortingPriority组件在树中的优先级。树是按从高到低的优先级排序的,最高优先级位于顶部。
许可协议安装用户需要接受的许可证协议列表。要添加多个许可证,请添加多个包含 <License> 子元素的 <Licenses> 元素,每个子元素分别指定许可证的 namefile,可选的 priority。支持 ASCII 和 UTF8 文件格式作为许可证文件。

如果此组件列出了翻译,则安装程序还会查找翻译的许可证。这些文件需要与原始许可证文件具有相同的名称,但需添加区域标识符。例如,如果许可证文件名为 license.txt,并且指定了德语翻译,则安装程序还会包含一个 license_de_de.txt 文件(并在德国系统上安装时显示它)。

脚本将要加载的脚本的文件名。可选项。指定 postLoad="true" 属性将导致脚本仅加载到选定的更新或安装的组件中。具有该属性时,脚本在组件安装开始之前立即加载。如果有大量组件具有安装脚本存储库,这将加快安装程序。确保脚本中不包含需要显示安装树视图之前评估的任何内容。有关更多信息,请参阅添加操作在组件脚本中使用 postLoad
用户界面要加载的页面列表。要添加多个页面,请添加多个包含 <UserInterface> 子元素的 <UserInterfaces> 元素,每个子元素分别指定页面的文件名。可选项。有关更多信息,请参阅添加页面
翻译要加载的翻译文件列表。为了添加多个语言变体,请指定多个具有文件名的 <Translation> 子元素,每个子元素指定一个语言变体的文件名。安装程序会加载与当前系统区域设置匹配的翻译文件。例如,如果系统区域设置为德语,则会加载 de.qm 文件。可选。有关更多信息,请参阅 翻译页面
UpdateText如果这是组件的更新,则将其添加到组件描述中。可选。
默认值可能的值有:truefalsescript。将设置为 true 以在安装程序中预先选择组件。这仅在没有任何可見子组件的组件上有效。布尔值将被直接评估,而 script 则在运行时解析。在此文件中将 <Script> 元素的名称作为值添加。有关示例脚本,请参阅 选择默认内容
基本将包标记为基本,强制维护工具重启。如果基本组件有可用的更新,则软件包管理器将保持禁用,直到该组件被更新。新引入的基本组件在运行更新程序时将自动安装。
强制安装确定包必须始终安装。最终用户无法在安装程序中取消选择它。在更新组件时,组件仍然可以从更新中取消选择。
强制更新将软件包标记为 强制更新 以强制维护工具重启。如果 强制更新 组件有可用的更新,则软件包管理器将保持禁用,直到该组件被更新。
替换以逗号分隔的组件列表,以替换。可选。
可下载的存档列出在线安装程序要下载的数据文件(以逗号分隔)。如果组件内部有一些数据,且 package.xml 和/或脚本没有 DownloadableArchives 的值,则 repogen 工具将自动注册发现的数据。
需要管理员权限如果该软件包需要使用提升的权限安装,则将其设置为 true。可选。
可选勾选如果您想隐藏项目的复选框,请将其设置为 false。这在只想选择少数子组件而不是全部时很有用。在更新组件时,复选框仍然可见,以允许切换组件以更新。可选。
默认展开如果要将该项默认展开,请将其设置为 true。可选。
操作当组件被安装时执行的操作列表。要添加多个操作,请指定多个具有操作 name<Operation> 子元素。根据要运行的操作,Operation 可以有多个 <Argument> 子元素。添加 <Operations> 是定义操作的另一种方法,而不是在脚本中定义它们。有关更多信息,请参阅 添加操作。有关可用操作的摘要,请参阅 操作
树名称指定组件在安装树视图中位置。覆盖由组件名称计算出的原始位置。组件名称和树名称必须是唯一的。可选。

指定 moveChildren="true" 属性还将更改该组件具有的任何子组件的位置。子组件将移动到覆盖的树名称,保持对其父组件的相对位置。

安装树视图中一个组件分支可以有多个组件指定树名称。更改组件位置顺序是从叶组件到根组件。

组件依赖关系

组件可能依赖于一个或多个真实或虚拟组件。依赖关系通过使用组件标识符以及可选的组件版本定义。使用短横线(-)将版本号与标识符分开。

您可以在版本号前添加比较运算符(=、>、<、>= 或 <=)来指示包的版本号与所需版本进行比较,并必须等于、大于、小于、大于等于或小于等于指定的依赖版本。如果没有给出比较运算符,则默认为 =。

数据目录

data 目录包含安装程序在安装过程中提取的内容。数据必须打包成存档文件。这可以通过在创建安装程序或仓库时由 binarycreatorrepogen 自动完成,或者您可以在之前先做此操作以获得更多控制。

对于手动创建存档,您可以使用附带的 Qt 安装程序框架中的 archivegen 工具,或者使用生成任何以下文件格式的其他工具:7zziptar.gztar.bz2tar.xz

注意:如果安装程序框架工具在没有 libarchive 支持的情况下构建,则只支持 7z 格式。

©2021 The Qt Company Ltd. 本文件包含的文档贡献的版权归其各自所有者。本文件提供的文档是根据免费软件基金会发布的版权协议 GNU Free Documentation License 1.3 版本 许可的。Qt 公司、Qt 及其相应标志是芬兰以及/或世界各地的 Qt 公司的商标。所有其他商标都是其各自所有者的财产。