【问题标题】:Qt Installer Framework - load binary automatically once installation is finishedQt Installer Framework - 安装完成后自动加载二进制文件
【发布时间】:2020-06-02 04:29:07
【问题描述】:

我想在使用 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);
    }
}

【问题讨论】:

  • 我总是使用您在代码中的注释:QDesktopServices.openUrl("file:///...."); 和 .... 文件的绝对路径。就像您在示例中注释掉的那样。
  • 但我不想加载任何 .txt 文件。我想加载一个二进制文件(操作系统:linux)
  • 如果你想启动一个独立的程序。你可以试试installer.executeDetached

标签: qt qt-installer


【解决方案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。如果您正在运行一个可执行文件,您将不会在 exectueDetached 命令中包含“bash”。

*请注意,我没有在exectueDetached 中添加"/DistributionKint/"。这是因为在您原始问题的注释行中,Abc.sh 直接位于@TargetDir@ 之下。显然,您需要将installer.executeDetached 传递给您的sh 脚本的正确路径。

【讨论】:

  • 如何定义脚本的正确路径?是否有任何特定的语法来定义路径?因为我的脚本位于如下所示的路径中:/home/../../packages/../data/DistributionKit。那么我需要如何指定这个路径呢?我还需要 component.addOperation("CreateShortcut", "@TargetDir@/DistributionKit/Abc.sh");如果我使用的是 installer.exectueDetached() ??
  • 在运行binarycreator 之前的某个时间点,您会将Abc.sh 脚本复制到您的包数据文件夹中。该文件夹中的所有内容都将在安装过程中复制到TargetDir。因此,Abc.sh 脚本的路径将是 TargetDir + 包数据文件夹中“Abc.sh”的相对路径。
  • 关于创建快捷方式部分,除非您确实想创建Abc.sh 脚本的快捷方式,否则您不需要它。无论您是否创建了快捷方式,executeDetached 都将起作用。
  • 如果您认为这是一个好的答案,请将其标记为已接受并点赞。否则,请告诉我更多有关您的问题的信息,以帮助您解决问题。
  • 出现如图所示的错误:TypeError: Property 'exectueDetached' of object QInstaller::PackageManagerCore(0x319ed70) is not a function
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 2019-11-16
  • 1970-01-01
  • 2014-02-09
  • 2022-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多