Component Error Example
组件错误示例
Using a component script to stop the installation if the components cannot be installed.
如果无法安装组件,则使用组件脚本停止安装。
Component Error demonstrates how to stop the installation and display error messages if one or several components cannot be installed.
组件错误演示了如何在一个或多个组件无法安装时停止安装并显示错误消息。
Configuring the Example Installer
配置示例安装程序
The installer configuration file, config.xml, in the config
directory specifies the text and default values used in the installer:
config目录中的安装程序配置文件config.xml指定了安装程序中使用的文本和默认值:
- The
<Name>
element sets the application name and adds it to the page name and introduction text. - <Name>元素设置应用程序名称并将其添加到页面名称和介绍文本中。
- The
<Version>
element sets the application version number. - <Version>元素设置应用程序版本号。
- The
<Title>
element sets the installer name and displays it on the title bar. - <Title>元素设置安装程序名称并将其显示在标题栏上。
- The
<Publisher>
element sets the publisher of the software (as shown in the Windows Control Panel, for example). - <Publisher>元素设置软件的发布者(例如,如Windows控制面板所示)。
- The
<StartMenuDir>
element sets the name of the default program group for the product in the Windows Start menu. - <StartMenuDir>元素在Windows“开始”菜单中设置产品的默认程序组的名称。
- The
<TargetDir>
element sets the default target directory location to be within theIfwExamples
directory in the home directory of the current user (because it uses the pre-existing variable,
@HomeDir@, as part of the value). For more information, see Predefined Variables. - <TargetDir>元素将默认目标目录位置设置为当前用户主目录中的IfwExamples目录内(因为它使用预先存在的变量@HomeDir@作为值的一部分)。有关详细信息,请参见预定义变量。
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
<Name>Component Error Example</Name>
<Version>1.0.0</Version>
<Title>Component Error Example</Title>
<Publisher>Qt-Project</Publisher>
<StartMenuDir>Qt IFW Examples</StartMenuDir>
<TargetDir>@HomeDir@/IfwExamples/componenterror</TargetDir>
</Installer>
Creating the Example Package Information File
创建示例包信息文件
The installer package information file, package.xml, in the meta
directory specifies the components that are available for installation:
meta
目录中的安装程序包信息文件package.xml指定了可用于安装的组件:
- The
<DisplayName>
element sets the human-readable name of the component. - <DisplayName>元素设置组件的人类可读名称。
- The
<Description>
element sets the human-readable description of the component. - <Description>元素设置组件的人类可读描述。
- The
<Version>
element sets the version number of the component. - <Version>元素设置组件的版本号。
- The
<ReleaseDate>
element sets the date of release for this component version. - <ReleaseDate>元素设置此组件版本的发布日期。
- The
<Script>
element specifies the file name of the JavaScript file that is loaded to perform operations. - <Script>元素指定加载以执行操作的JavaScript文件的文件名。
<?xml version="1.0"?>
<Package>
<DisplayName>Root Component</DisplayName>
<Description>This component handles the errors in the other components.</Description>
<Version>1.0.1</Version>
<ReleaseDate>2013-08-21</ReleaseDate>
<Script>installscript.js</Script>
</Package>
This example attempts to install three components, so we create a package.xml file in each component directory: root
, root.component1
, and root.component2
and specify the component name and description in each of them.
此示例尝试安装三个组件,因此我们在每个组件目录中创建一个package.xml文件:root、root.component1和root.compontent2,并在每个目录中指定组件名称和描述。
Stopping the Installation on Errors
出现错误时停止安装
In installscript.js in the root
directory, we call the abortInstaller()
function to hide all the default installer pages and to display an error message if the components contain errors:
在根目录的installscript.js中,我们调用abortInstaller()函数来隐藏所有默认的安装程序页面,并在组件包含错误时显示错误消息:
function abortInstaller()
{
installer.setDefaultPageVisible(QInstaller.Introduction, false);
installer.setDefaultPageVisible(QInstaller.TargetDirectory, false);
installer.setDefaultPageVisible(QInstaller.ComponentSelection, false);
installer.setDefaultPageVisible(QInstaller.ReadyForInstallation, false);
installer.setDefaultPageVisible(QInstaller.StartMenuSelection, false);
installer.setDefaultPageVisible(QInstaller.PerformInstallation, false);
installer.setDefaultPageVisible(QInstaller.LicenseCheck, false);
var abortText = "<font color='red' size=3>" + qsTr("Installation failed:") + "</font>";
var error_list = installer.value("component_errors").split(";;;");
abortText += "<ul>";
// ignore the first empty one
for (var i = 0; i < error_list.length; ++i) {
if (error_list[i] !== "") {
console.log(error_list[i]);
abortText += "<li>" + error_list[i] + "</li>"
}
}
abortText += "</ul>";
installer.setValue("FinishedText", abortText);
}
We use the reactOnAbortInstallerChange()
signal to stop the installation if ComponentError
is true
:
如果ComponentError为真,我们使用reactOnAbortInstallerChange()信号停止安装:
function reactOnAbortInstallerChange()
{
if (installer.value("ComponentError") === "true")
abortInstaller();
}
We use the Component()
function to connect to the reactOnAbortInstallerChange()
signal when the list of new root components has been updated:
当新根组件列表更新时,我们使用Component()函数连接到reactOnAbortInstallerChange()信号:
function Component()
{
installer.finishAllComponentsReset.connect(reactOnAbortInstallerChange);
}
To open the page that displays the error message, we create fake errors by setting ComponentError
to true
in installscript.js in the root.component1
and root.component2
directories:
为了打开显示错误消息的页面,我们通过在root.component1和root.componnt2目录中的installscript.js中将ComponentError设置为true来创建虚假错误:
function Component()
{
var error = true;
if (error) {
installer.setValue("component_errors", installer.value("component_errors") + ";;;"
+ "Error in component: " + component.name);
}
installer.setValue("ComponentError", true);
}
Each component adds a message to the component_errors
variable. In your app, the error
variable should return the results of a real check for an existing file or system feature.
每个组件都会向component_errors变量添加一条消息。在应用程序中,error
变量应返回对现有文件或系统功能的实际检查结果。
Generating the Example Installer
生成示例安装程序
To create the example installer, switch to the example source directory on the command line and enter the following command:
要创建示例安装程序,请在命令行上切换到示例源代码目录,然后输入以下命令:
- On Windows:
..\..\bin\binarycreator.exe -c config\config.xml -p packages installer.exe
- On Linux or macOS:
../../bin/binarycreator -c config/config.xml -p packages installer
This creates the installer to the current directory.
这将创建当前目录的安装程序。
Files:
- componenterror/componenterror.pro
- componenterror/config/config.xml
- componenterror/packages/root.component1/meta/installscript.js
- componenterror/packages/root.component1/meta/package.xml
- componenterror/packages/root.component2/meta/installscript.js
- componenterror/packages/root.component2/meta/package.xml
- componenterror/packages/root/meta/installscript.js
- componenterror/packages/root/meta/package.xml
© 2021 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. The Qt Company, Qt and their respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.