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?)

Qt Installer Framework - 在开始菜单中为所有用户创建快捷方式

重要网址小记

重要网址小记