Qt Installer Framework - Запретить установку в непустую папку - PullRequest
1 голос
/ 28 июня 2019

Я использую Qt Installer Framework.

Хочу узнать, как предотвратить установку в непустую папку?

Кроме того, как я могу заставить деинсталлятор удалять только те файлы и папки, которые он установил, а не все содержимое его папки?

Заранее спасибо

1 Ответ

0 голосов
/ 01 июля 2019

Благодаря документации Qt у вас есть доступ к QDesktopServices внутри API сценариев, который содержит функцию findFiles(string path,string pattern), которая не должна возвращать ничего в вашем случае, где путь - это ваш целевой каталог для установки.

В программе установки TargetDirectory Страница установщика у вас есть доступ к установленному каталогу 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 в выборе компонентов.

Моим желаемым решением было заранее отключить NextButton на странице TargetDirectory, но все мои попытки были тщетными.Даже если следующее отключение NextButton должно работать, как показано в этом ответе .

...