You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jpackage将程序添加到开机自启并实现安装后自动运行?

jpackage实现开机自启+安装后自动启动的两种方案

方案1:jpackage原生+自定义安装脚本(无需修改应用代码)

安装后自动启动实现

jpackage Windows平台原生提供--win-run-on-install参数,直接添加到打包命令即可实现安装完成后自动运行程序,无需额外开发。

开机自启实现

jpackage没有直接的开机自启参数,可通过自定义安装脚本添加注册表启动项实现:

  1. 新建add-startup.bat脚本,和打包命令执行路径放在同一目录,内容如下:
@echo off
:: 给当前用户添加开机自启,不需要管理员权限
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "Sample-Javafx" /t REG_SZ /d "%~dp0Sample-Javafx.exe" /f
:: 如果需要给所有用户添加自启,替换上面的HKCU为HKLM,需要安装时以管理员权限运行安装包
  1. 修改jpackage打包命令,添加自定义脚本参数:
jpackage --win-dir-chooser --runtime-image ./target/image/ --name Sample-Javafx --module Sample/org.openjfx.App -d ./target/bin/ --win-run-on-install --win-custom-action add-startup.bat

方案2:应用内部代码实现

如果不想添加自定义脚本,可以在应用启动时自动检查并注册开机自启,修改App.java即可:

完整修改后的App.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;
import java.io.File;
import java.nio.file.Paths;

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

    private static void registerStartup() {
        try {
            // 获取当前程序所在目录
            String appDir = new File(App.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getParent();
            String exeFullPath = Paths.get(appDir, "Sample-Javafx.exe").toString();
            // 检查是否已经注册过自启
            Process checkProcess = new ProcessBuilder("reg", "query", "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", "/v", "Sample-Javafx").start();
            if (checkProcess.waitFor() != 0) {
                // 未注册则添加启动项
                new ProcessBuilder("reg", "add", "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", "/v", "Sample-Javafx", "/t", "REG_SZ", "/d", exeFullPath, "/f").start();
            }
        } catch (Exception ignored) {
            // 注册失败不影响主程序运行,可根据需要添加日志
        }
    }

    @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) {
        registerStartup();
        launch();
    }
}

说明

  • 代码中使用当前用户注册表路径HKCU,无需管理员权限即可注册
  • 如果需要用户可自主控制是否开启自启,可在界面中增加开关,调整上述注册逻辑即可

内容的提问来源于stack exchange,提问作者srilakshmikanthanp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:18:04