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

sri*_*anp 6 java installation windows-installer javafx jpackage

我最近查看了 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

模块信息.java

module Sample {
    requires javafx.controls;
    opens org.openjfx;
}
Run Code Online (Sandbox Code Playgroud)

使用maven生成运行时,

mvn javafx:jlink
Run Code Online (Sandbox Code Playgroud)

然后生成安装程序,

jpackage --win-dir-chooser --runtime-image ./target/image/ --name Sample-Javafx --module Sample/org.openjfx.App -d ./target/bin/
Run Code Online (Sandbox Code Playgroud)

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

Hir*_*uri 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 版本有类似的东西?