【问题标题】:Qt Installer Framework - Prevent installation in non-empty folderQt Installer Framework - 防止安装在非空文件夹中
【发布时间】:2019-06-28 11:23:03
【问题描述】:

我使用 Qt 安装程序框架。

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

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

提前谢谢你

【问题讨论】:

    标签: qt frameworks installation qt-installer


    【解决方案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:如果您对解决方案感到满意,您可以投票并接受它。 :-)
    猜你喜欢
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    相关资源
    最近更新 更多