Qt Installer Framework - 防止安装在非空文件夹中
Posted
技术标签:
【中文标题】Qt Installer Framework - 防止安装在非空文件夹中【英文标题】:Qt Installer Framework - Prevent installation in non-empty folder 【发布时间】:2019-06-28 11:23:03 【问题描述】:我使用 Qt 安装程序框架。
我想知道如何防止安装在非空文件夹中?
另外,如何让卸载程序只删除它已安装的文件和文件夹,而不是其文件夹的所有内容?
提前谢谢你
【问题讨论】:
【参考方案1】:由于 Qt 文档,您可以访问脚本 API 中的 QDesktopServices,其中包含函数 findFiles(string path,string pattern)
,在您的情况下应该返回 none,其中 path 是您的安装目标目录。
在 TargetDirectory 安装程序 Installer Page 中,您可以通过 Installer Page 访问设置的 TargetDirectory,如果有一些编辑可以连接到。
我花了一些时间才弄清楚以下解决方案,我不得不承认这不是我事先想要的方式。
首先您需要一个控制脚本,它需要在您的config.xml
中设置。它被称为controlScript.js
,与您的config.xml
位于同一目录中。
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>
<StartMenuDir>Super App</StartMenuDir>
<TargetDir>@HomeDir@/InstallationDirectory</TargetDir>
<ControlScript>controlScript.js</ControlScript>
</Installer>
现在,我带来的唯一解决方案如下:
controlScript.js
function Controller()
console.log("Control script");
Controller.prototype.ComponentSelectionPageCallback = function()
var widget = gui.currentPageWidget();
widget.title="Select empty directory!";
var targetDirWidget = gui.pageById(QInstaller.TargetDirectory);
var targetDir=targetDirWidget.TargetDirectoryLineEdit.text;
var files=QDesktopServices.findFiles(targetDir, "*.*");
if (files.length!=0)
var result = QMessageBox.warning("quit.question", "You selected a non-empty directory!", targetDir,QMessageBox.Ok);
gui.clickButton(buttons.BackButton);
基本上,用户进入一个目标目录并按下 BackButton。如果目标目录非空,则会显示一个消息框并按下组件选择中的后退按钮。
我想要的解决方案是事先停用 TargetDirectory 页面中的 NextButton,但我所有的尝试都是徒劳的。即使以下禁用 NextButton 应该可以工作,如 answer 所示。
【讨论】:
@BobL:如果您对解决方案感到满意,您可以投票并接受它。 :-)以上是关于Qt Installer Framework - 防止安装在非空文件夹中的主要内容,如果未能解决你的问题,请参考以下文章
在 Qt Installer Framework (QtIFW) 安装程序中安装 VC++ Redistributables?
Qt Installer Framework - 防止安装在非空文件夹中
使用Qt installer framework制作安装包(不知道是否适合Mac和Linux?)