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

时间:2019-06-28 11:23:03

标签: qt frameworks installer qt-installer

我使用Qt安装程序框架。

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

此外,如何使卸载程序仅删除已安装的文件和文件夹,而不删除其文件夹的所有内容?

提前谢谢

1 个答案:

答案 0 :(得分:0)

由于Qt文档的原因,您可以访问脚本API中的QDesktopServices,该脚本API包含函数findFiles(string path,string pattern),在您的情况下该函数不应返回任何内容,其中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。如果目标目录为非空,则会显示一个消息框,并按下“组件选择”中的BackButton。

我想要的解决方案是事先停用TargetDirectory页面中的NextButton,但是我的所有尝试都是徒劳的。即使下面的禁用NextButton应该起作用,如answer所示。