基于QtIFW创建程序安装包,卸载程序快捷方式创建
概述
- 本文将介绍如何创建桌面快捷方式
- 本文将介绍一种卸载前监测程序运行时中断卸载流程
- 本文演示代码基于官方的tutorial
- 本文演示代码下载
卸载前监测程序运行
- 自己尝试了好多基于QtIFW的安装包,发现,
软件运行时,都能顺利卸载软件
。 - 实现目标:软件运行时,卸载程序启动时能提示软件正在运行,同时中断卸载流程。便有了此文。
环境
- QtIFW版本: 4.5.2, 下载地址
- 操作系统: windows 11
目录结构
- 运行
安装包一键生成.bat
即可生成安装包, 不过, 需要将 Qtifw/bin的目录设置到系统环境变量
.
│ 安装包一键生成.bat
│
├─config
│ config.xml
│ controlscript.js
│
└─packages
└─com.vendor.product
├─data
│ installcontent.txt
│
└─meta
installscript.js
package.xml
创建快捷方式
- 这里演示,使用Uninstaller.exe的卸载快捷方式放在桌面
installscript.js
文件:packages\com.vendor.product\meta\installscript.js (官方先前为qs文件,自己测试改为了js)- 关键代码: createOperations 中创建快捷方式。
component.addOperation("CreateShortcut", "@TargetDir@/Uninstaller.exe", "@DesktopDir@/卸载.lnk");
- 文件内容
function Component()
{
}
Component.prototype.createOperations = function()
{
try
{
// call the base create operations function
component.createOperations();
/// 创建快捷方式
component.addOperation("CreateShortcut", "@TargetDir@/Uninstaller.exe", "@DesktopDir@/卸载.lnk");
}
catch (e)
{
console.log(e);
}
}
卸载检测是否程序是否运行
这里演示, 检测
Notepad3.exe
是否运行
- 1 切换到
config
目录, - 2 创建名为controlscript.js脚本文件
- 3 打开config目录下的config.xml文件,增加以下关键代码
<MaintenanceToolName>Uninstaller</MaintenanceToolName>
<ControlScript>controlscript.js</ControlScript>
此时, config.xml文件内容为
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
<Name>Your application</Name>
<Version>1.0.0</Version>
<Title>Your application Installer</Title>
<Publisher>Your vendor</Publisher>
<MaintenanceToolName>Uninstaller</MaintenanceToolName>
<ControlScript>controlscript.js</ControlScript>
</Installer>
注意, config.xml中的
MaintenanceToolName
值需要与packages/com.vendor.product/meta/installscript.js
中Uninstaller.exe保持一致
- 5 编写
controlscript.js
文件内容并保存
function Controller()
{
if (installer.isUninstaller())
{
if (installer.isProcessRunning("Notepad3.exe"))
{
QMessageBox.critical("卸载", "提示", "Notepad3.exe正在运行,请退出软件后,再卸载");
/// 因为没有从官方QTIFW提供的文档中找到如何中途退出Maintanencetool.exe的函数,
/// 但是这里又需要中断卸载流程。
/// 投机取巧, 执行一个installer不存在的函数exit,用于中断卸载流程
installer.exit();
}
}
}
- 6 运行
安装包一键生成.bat
, 即可在与安装包一键生成.bat
同级目录下生成安装包
测试
- 安装上面生成的安装包
- 启动
Notepad3.exe
- 运行桌面生成的
卸载
快捷方式
将提示
Notepad3.exe正在运行,请退出软件后,再卸载
卸载中断流程关键代码
- 翻遍了
QtIFW
的官方文档,没有提及如何中断卸载流程和相关范例。便使用取巧的方式,执行了一个installer
的不存在的函数exit
, 用于中断卸载流程。 - 若看到这里的你知道如何使用
Maintanencetool.exe
卸载程序前检测程序运行后中中断卸载流程, 请留言交流 。 😄 - 中断卸载流程关键代码
/// 因为没有从官方QTIFW提供的文档中找到如何中途退出Maintanencetool.exe的函数,
/// 但是这里又需要中断卸载流程。
/// 投机取巧, 执行一个installer不存在的函数exit,用于中断卸载流程
installer.exit();