Qt Installer Framework - 防止在非空文件夹中安装

Qt Installer Framework - Prevent installation in non-empty folder

我使用 Qt Installer Framework。

我想知道如何防止在非空文件夹中安装?

此外,如何让卸载程序只删除它已安装的文件和文件夹,而不是其文件夹中的所有内容?

提前致谢

由于 Qt 文档,您可以访问脚本 API 中的 QDesktopServices,其中包含函数 findFiles(string path,string pattern),应该 return none 在你的例子中,路径是你的安装目标目录。

在 TargetDirectory 安装程序 Installer Page you have access to the set TargetDirectory via Installer Page 中,如果有一些编辑,可以连接到它。

我花了一些时间才想出以下解决方案,我不得不承认这不是我事先想要的方式。

首先你需要一个控制脚本,它需要在你的 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);        
    }    

}

基本上,用户进入目标目录并按下返回按钮。如果目标目录是 non-empty,将显示一个消息框并按下组件选择中的返回按钮。

我想要的解决方案是事先停用 TargetDirectory 页面中的 NextButton,但我的所有尝试都是徒劳的。尽管下面的 NextButton 禁用应该有效,如此 answer.

所示