如何使用jpackage添加程序启动?

问题描述 投票:0回答:2

我最近查看了jpackage,有任何选项会自动将应用程序添加到启动中,例如考虑我有,

应用程序.java

package org.openjfx;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

/**
 * JavaFX App
 */
public class App extends Application {

    @Override
    public void start(Stage stage) {
        var label = new Label("Hello, JavaFX");
        var scene = new Scene(new StackPane(label), 640, 480);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}

模块信息.java

module Sample {
    requires javafx.controls;
    opens org.openjfx;
}

使用maven生成运行时,

mvn javafx:jlink

然后生成安装程序,

jpackage --win-dir-chooser --runtime-image ./target/image/ --name Sample-Javafx --module Sample/org.openjfx.App -d ./target/bin/

这一切都工作正常,但我想要的是在启动时注册 App.java 并在安装后启动此应用程序是否可以使用 jpackage 或者 App.java 中有任何技巧可以实现此目的?

java javafx installation windows-installer jpackage
2个回答
0
投票

当您在 Windows 上运行时,我知道如何在 Linux 上解决这个问题。

JPackage 将创建一个 Debian 软件包。这样的包主要包含两个 tar 球:主要的一个包含需要安装在文件系统中的文件。另一个包含元数据(我们这里有什么包?)以及四个脚本,每个脚本都将在特定事件中运行:

  • 在解压 tar 球之前执行 preinst(安装)
  • 解压 tar 球后执行 postinst(安装)
  • 在应用程序被删除(卸载)之前执行prerm
  • postrm 在应用程序被删除(卸载)之前执行

回到你的问题,我所要做的就是提供我的 postinst 脚本版本,该脚本会将应用程序注册为自动启动,如下 https://docs.oracle.com/en/java/javase/17/jpackage /override-jpackage-resources.html#GUID-1B718F8B-B68D-4D46-B1DB-003D7729AAB6

也许 Windows 版本有类似的东西?


0
投票

要将程序添加到自动启动,您需要自定义

jpackage
使用的 Wix 配置。第一次运行时执行此操作:

jpackage --temp <some directory> ...

有关

jpackage
参数的详细信息可以在这里找到。

这将创建您的

jpackage
版本使用的 Wix 配置快照。在该目录中,您应该找到
main.wxs
文件,它是安装程序的主要配置文件。创建一个
resources
文件夹并将
main.wxs
文件的副本放入该文件夹中。您可以通过添加
 使 
jpackage

使用您的配置
--resource-dir resources

首次运行后,您应该不会看到任何差异,但现在,您可以通过更改

main.wxs
目录中的
resources
文件来自定义 Wix 安装程序。 您可以通过添加适当的 Windows 注册表项来使程序自动启动 - 在
<Feature>
标记

之前添加以下代码片段
<DirectoryRef Id="TARGETDIR">
  <Component Id="AutostartComponent" Guid="{your-unique-uuid}">
    <RegistryKey Root="HKCU" Key="Software\Microsoft\Windows\CurrentVersion\Run">
      <RegistryValue Type="string" Name="$(var.JpAppName)" Value="&quot;[INSTALLDIR]$(var.JpAppName).exe&quot;" />
    </RegistryKey>
  </Component>
</DirectoryRef>

确保您的

exe
文件名遵循代码片段中使用的模式。

接下来,在

<Feature>
标签的末尾添加对创建的组件的引用:

  ... 
  <ComponentRef Id="AutostartComponent"/>
</Feature>

有关在安装过程中添加注册表项的详细信息可以在此处找到。

© www.soinside.com 2019 - 2024. All rights reserved.