当前位置:   article > 正文

Qt Installer Framework应用总结_qt 安装

qt 安装

Qt Installer Framework应用总结

官网文档位置:https://doc.qt.io/qtinstallerframework/ifw-overview.html

本文主要是讲解配置文件的区别以及脚本的使用和一些概念的理解 ,基础的使用方式直接参考官方文档最佳。

1、Centos7.9上安装

安装包下载地址:https://download.qt.io/official_releases/qt-installer-framework/

我选择的是3.1.1版本。
在这里插入图片描述

下载.run文件在centos上执行,顺序点“下一步”就行。

注:一定要记住安装的位置

2、简单的应用

参考官方文档:https://doc.qt.io/qtinstallerframework/ifw-tutorial.html

3、结构的讲解

基于:https://doc.qt.io/qtinstallerframework/ifw-reference.html
在这里插入图片描述

3.1、Configuration File

这是一个配置文件,贯穿整个安装、卸载、更新的配置信息,这个一定要明白!!!!一定要区别于package中的package.xml配置文件。

个人用到的最主要的字段

3.1.1、RemoveTargetDir

当为false时,在程序卸载的时候会不删除安装目录。

3.1.2、ControlScript

这个最重要,这里是用户自定义控制脚本的文件名,一般将该控制脚本放在与该配置文件同目录下。

控制脚本中使用到最多的就是installer全局变量

<!--config.xml-->
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
    <Name>测试标题</Name>
	<Version>1.0.0</Version>
	<Title>测试向导======******</Title>
	<Publisher>test</Publisher>
	
	<StartMenuDir>TestWorkstation</StartMenuDir>
	<RemoveTargetDir>false</RemoveTargetDir>
	<ControlScript>control.qs</ControlScript>
	<TargetDir>@HomeDir@/TestWorkstation</TargetDir>
</Installer>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
function Controller() {
    // 判断是否是卸载程序
    if(installer.isUninstaller()){
	    installer.uninstallationStarted.connect(this, this.uninstallationStarted);
	}
    // 判断是否是安装程序
	if(installer.isInstaller()){
	    installer.installationStarted.connect(this,this.installationStarted);
	}
}

// 卸载开始前需要执行的操作
Controller.prototype.uninstallationStarted = function() {
    installer.execute("touch","/home/centos/test_TTTTT");
	installer.execute("mkdir","/home/centos/TestWorkstation");
	installer.execute("mkdir","${HOME}/TestWorkstation/Databases");
	installer.execute("cp",["/home/centos/TestWorkstation/app.png","/home/centos/TestWorkstation/test"]);
}

// 开始安装前执行的操作
Controller.prototype.installationStarted = function() {
    installer.execute("touch","/home/centos/test_Start");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

上面只是示范如何使用控制脚本来控制安装前或卸载前执行的内容;更多操作可以参考installer的文档

https://doc.qt.io/qtinstallerframework/scripting-installer.html

3.2 Package Directory

先看目录结构
在这里插入图片描述

packages中可以有多个目录,每一个目录代表着每一个需要安装的component。

上图中只有一个main目录,其下面有data和meta两个目录。

data目录主要用于存放该component需要的所有文件(包、依赖库、可执行文件、脚本等等)

meta目录主要存放该component的配置信息以及安装前后的脚本(package.xml、脚本等等)
在这里插入图片描述

一定要区分:config.xml和package.xml这个两个配置文件。config.xml是作用于整个安装、卸载、更新等流程的,脚本中大多使用installer这个全局变量;package.xml这个仅仅作用于当前的component这个模块,如果该模块不被安装他的脚本也没有用的,脚本中大多使用component这个全局变量。

3.2.1 package.xml

package.xml配置文件中主要要注意的是几个required的字段一定要有,版本不同必填字段也不同,这个需要根据官方文档来看。

使用脚本需要使用Script这个字段,将脚本名放入其中就行

<!--package.xml--->
<?xml version="1.0" encoding="UTF-8"?>
<Package>
    <DisplayName>测试模块</DisplayName>
	<Description>这个模块使用来测试是不是可以删除的</Description>
	<Version>1.0</Version>
	<ReleaseDate>2022-01-01</ReleaseDate>
	<Licenses>
	    <License name="keda license" file="license.txt"/>
	</Licenses>
	<Default>true</Default>
	<Script>installscript.qs</Script>
</Package>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
function Component() {}
Component.prototype.isDefault = function() {
	return true;
}
Component.prototype.createOperations = function(){
	try{
		component.createOperations();
		if(installer.value("os") === "win"){
			component.addOperation("CreateShortcut", "@TargetDir@/EchoDialog.exe","@DesktopDir@/test.lnk");
		}else if(installer.value("os") === "x11"){
			component.addElevatedOperation("CreateDesktopEntry", "@TargetDir@/test.desktop", "[Desktop Entry]\nEncoding=UTF-8\nVersion=1.0\nType=Application\nTerminal=false\nExec=@TargetDir@/RunApp\nName=test\nIcon=@TargetDir@/app.png");
	        //获取当前桌面路径    
	        var desktoppath = QDesktopServices.storageLocation(0);
	        //将桌面文件复制到/usr/share/applications/	目录下
            component.addElevatedOperation("Copy", "@TargetDir@/test.desktop", "/usr/share/applications/test.desktop");
	        //将桌面文件复制到桌面目录下
            component.addElevatedOperation("Copy", "@TargetDir@/test.desktop", desktoppath + "/test.desktop");
		}
	}catch(e){
		print(e);
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

上面是经典的创建桌面图标的示例。

更多component函数详解文档:https://doc.qt.io/qtinstallerframework/scripting-component.html

然后就是component这个addOperation/addElevatedOperation的Operation字段主要来自于:

https://doc.qt.io/qtinstallerframework/operations.html

其中Execute操作可以在安装完该component后执行指定的脚本或其他操作。

参考博客:https://zhuanlan.zhihu.com/p/146085598

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/170736
推荐阅读
相关标签
  

闽ICP备14008679号