Java:程序开机自启动

时间:2022-06-17 15:39:35

 

一、加到开机自动启动程序的注册表:

 

package com.zit;

import java.io.IOException;

public class Start {

public static void ChangeStart(boolean isStartAtLogon) throws IOException{
String regKey
= "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
String myAppName
= "notepad++";
String exePath
= "D:\\Notepad++\\notepad++.exe";//开机启动程序本地目录
Runtime.getRuntime().exec("reg " + (isStartAtLogon?"add ":"delete ") + regKey + " /v "
+ myAppName + (isStartAtLogon?" /t reg_sz /d " + exePath:" /f"));
}


public static void main(String[] args) {
try{
ChangeStart(
true);
}
catch(Exception e){
e.printStackTrace();
}


}

}

这里是把程序加到系统自动启动额外程序(非系统服务)的注册表,

用户必须登录系统才可以,如果不登陆,则不行,

如果要让windows开机,不登陆,就能自动启动,需要将这个程序放到系统服务注册表里

 

 

二、加到系统服务,实现自动启动

 

实现方法:使用第三方工具Java Service Wrapper

 

(还有微软自带的工具srvany,加到系统服务,但是貌似在windows7及之后版本不可以使用)

 

下载地址:https://wrapper.tanukisoftware.com/doc/english/download.jsp

 

Community社区版是免费的,Professional和Standard版本需要licence


windows 64位目前没有免费版,所以,我的电脑是64位,但下载的是32位版本(貌似实现了,有问题后面再说)

Java:程序开机自启动

接下来需要做的是:

(1)新建一个文件夹Test,在里面新建四个文件夹:bin、conf、lib、logs

(2)有一个Java类,然后用Eclipse把他导出成jar包

package com.zit.controller;

public class Test {

public static void main(String[] args) throws Exception{
for(int i = 0; i < 999; i++){
System.
out.println(i);
}

}

}

 

把Test.java放在Test目录下,把它的jar包放在lib目录下(其实,只需要它的Test.jar就可以)

 

(3)下载包解压后

 

  a、 下载包src/bin/的App.bat.in,InstallApp-NT.bat.in,UninstallApp-NT.bat.in  和  bin/下的wrapper.exe    放在新建的bin目录下,把后缀.in去掉。

 

App.bat(可以直接运行程序),

InstallApp
-NT.bat(安装成Windows服务),

UninstallApp
-NT.bat(卸载Windows服务)】

 

 

  b、下载包lib目录下的wrapper.dll、wrapper.jar放到新建的lib下

 

  c、下载包src/conf下的wrapper.conf.in放到新建的conf下,把后缀.in去掉

 

(4)修改wrapper.conf

#电脑要有jdk环境
wrapper.java.command
=%JAVA_HOME%/bin/java

#这个不用改变
wrapper.java.mainclass
=org.tanukisoftware.wrapper.WrapperSimpleApp

#lib包下的jar文件
wrapper.java.classpath.
1=../lib/wrapper.jar
wrapper.java.classpath.
2=../lib/Test.jar

#lib目录
wrapper.java.library.path.
1=../lib

#Test.java的完整路径(包含包名)
wrapper.app.parameter.
1=com.zit.controller.Test

#服务名
wrapper.name
=服务名
wrapper.displayname
=显示服务名
wrapper.description
=服务描述

 

 

(5)完成后图示:

  

Test目录

  Java:程序开机自启动

 

bin子目录:

  Java:程序开机自启动

conf子目录:

  Java:程序开机自启动

lib子目录:

  Java:程序开机自启动

logs子目录:

  运行时自动生成的一个log文件

 

运行:

 

1、点击bin文件夹下的App.bat

成功的效果:

Java:程序开机自启动

 

 

2、点击bin文件夹下的InstallApp-NT.bat:将会注册为系统服务

  默认没有启动,手动启动一下,可以看到自动生成的log文件会有运行的日志

 

3、点击bin文件夹下的UninstallApp-NT.bat:将会卸载该服务