赞
踩
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>
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"); }
上面只是示范如何使用控制脚本来控制安装前或卸载前执行的内容;更多操作可以参考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>
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); } }
上面是经典的创建桌面图标的示例。
更多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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。