Qt Installer Framework - загружать двоичный файл автоматически после завершения установки

Я хочу автоматически загрузить двоичный файл после завершения установки с использованием среды установки Qt. Как этого можно достичь?

Я пытаюсь отредактировать этот скрипт и добавить component.addOperation("CreateShortcut", "@TargetDir@/DistributionKit/Abc.sh"); Но он не загружает скрипт автоматически. Что мне не хватает?

function Component()
{
    installer.installationFinished.connect(this, Component.prototype.installationFinishedPageIsShown);
    installer.finishButtonClicked.connect(this, Component.prototype.installationFinished);

}


Component.prototype.createOperations = function()
{
    component.createOperations();
}

Component.prototype.installationFinishedPageIsShown = function()
{
    try {
        if (installer.isInstaller() && installer.status == QInstaller.Success) {
            installer.addWizardPageItem( component, "ReadMeCheckBoxForm", QInstaller.InstallationFinished );
        }
    } catch(e) {
        console.log(e);
    }
}

Component.prototype.installationFinished = function()
{
    try {
        if (installer.isInstaller() && installer.status == QInstaller.Success) {
            var isReadMeCheckBoxChecked = component.userInterface( "ReadMeCheckBoxForm" ).readMeCheckBox.checked;
            if (isReadMeCheckBoxChecked) {
                //QDesktopServices.openUrl("file:///" + installer.value("TargetDir") + "/Abc.sh");
		component.addOperation("CreateShortcut", "@TargetDir@/DistributionKit/Abc.sh");
            }
        }
    } catch(e) {
        console.log(e);
    }
}


person Lisha    schedule 02.06.2020    source источник
comment
Я всегда использую то, что у вас есть, в качестве комментария в вашем коде: QDesktopServices.openUrl("file:///...."); с .... абсолютным путем к вашему файлу. Точно так же, как вы это прокомментировали в своем примере.   -  person apalomer    schedule 02.06.2020
comment
Но я не хочу загружать какой-либо файл .txt. Я хочу загрузить бинарный файл (os : linux)   -  person Lisha    schedule 02.06.2020
comment
Если вы хотите запустить отдельную программу. Вы можете попробовать с installer.executeDetached   -  person apalomer    schedule 02.06.2020


Ответы (1)


Инфраструктура установщика Qt имеет функцию executeDetached в установщике. Я считаю, что это то, что вам нужно использовать для запуска вашей программы. В этом случае ваш скрипт будет выглядеть так (только с добавлением затронутой функции):

Component.prototype.installationFinished = function()
{
    try {
        if (installer.isInstaller() && installer.status == QInstaller.Success) {
            var isReadMeCheckBoxChecked = component.userInterface( "ReadMeCheckBoxForm" ).readMeCheckBox.checked;
            if (isReadMeCheckBoxChecked) {
                installer.exectueDetached("bash", installer.value("TargetDir") + "/Abc.sh");
                component.addOperation("CreateShortcut", "@TargetDir@/DistributionKit/Abc.sh");
            }
        }
    } catch(e) {
        console.log(e);
    }
}

Обратите внимание, что на самом деле вам нужно запустить «bash» как executeDetached и передать ваш скрипт в качестве аргумента в bash. Если бы вы запускали исполняемый файл, у вас не было бы «bash» в команде exectueDetached.

*Обратите внимание, что я не добавлял "/DistributionKint/" в exectueDetached. Это связано с тем, что в закомментированной строке исходного вопроса Abc.sh находился непосредственно под @TargetDir@. Очевидно, вам нужно передать installer.executeDetached правильный путь к вашему сценарию sh.

person apalomer    schedule 02.06.2020
comment
Как определить правильный путь скрипта? Есть ли какой-то конкретный синтаксис для определения пути? Поскольку мой скрипт находится по указанному пути: /home/../../packages/../data/DistributionKit. Итак, как мне нужно указать этот путь? Также мне нужен component.addOperation(CreateShortcut, @TargetDir@/DistributionKit/Abc.sh); если я использую installer.exectueDetached() ?? - person Lisha; 02.06.2020
comment
В какой-то момент перед запуском binarycreator вы скопируете свой скрипт Abc.sh в папку данных пакета. Все в этой папке будет скопировано во время установки в TargetDir. Таким образом, путь вашего Abc.sh сценария будет TargetDir + относительный путь к «Abc.sh» в папке данных вашего пакета. - person apalomer; 02.06.2020
comment
Что касается части создания ярлыка, она вам не нужна, если только вы не хотите создать ярлык для своего сценария Abc.sh. executeDetached будет работать независимо от того, создан ваш ярлык или нет. - person apalomer; 02.06.2020
comment
Если вы считаете, что это хороший ответ, отметьте его как принятый и проголосуйте. В противном случае, пожалуйста, расскажите мне больше о вашей проблеме, чтобы помочь вам решить ее. - person apalomer; 02.06.2020
comment
Получение ошибки, как показано: TypeError: свойство exectueDetached объекта QInstaller::PackageManagerCore(0x319ed70) не является функцией - person Lisha; 04.06.2020
comment
Можете ли вы поделиться mcve, который воспроизводит эту ошибку? - person apalomer; 04.06.2020