windows开机启动jar
使用场景:
将jar程序设置为开机启动(注:windows上)
方法一:vbs文件方式
原理将文件放入windows启动文件夹,开机启动时会执行vbs文件
创建bat文件
将 java -jar xxxx.jar 执行命令放入bat文件中
1 | @echo off |
创建vbs文件
1 | set ws=WScript.CreateObject("WScript.Shell") |
创建vbs快捷方式
创建该vbs文件的快捷方式放入windows的启动文件夹内,不同系统文件夹路径不同
如:win10专业版 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
若找不到则直接资源管理器打开该地址 或者 必找到位置方式 win+R 键入 shell:startup回车
缺点:若给直接使用的人使用,不便于部署
方法二:windows服务方式
失败案例 sc
通过windows自带的sc.exe工具创建windows服务
- 创建
1 | sc.exe create XXXXname binpath= C:\XXXX.bat start= auto |
格式为 sc.exe create 服务名 binpath= 需要自启的bat路径 start= auto(服务启动方式)
- 删除
1 | sc.exe delete XXXXname |
格式为 sc.exe delete 服务名
结果:可创建服务,但启动服务超时(windows 1053),网上找了很多解决方式如修改执行权限等无一解决,目前猜想,windows服务只能启动.exe文件,无法执行.bat文件
成功案例一 winsw
使用第三方winsw程序,原理为注册window服务启动winsw.exe,再由winsw.exe启动java程序
环境需要JDK,所以jdk安装必不可少
下载winsw程序,由于3版本没有2版本的简洁,使用的2版本的 下载地址
为了区分启动的程序,需对winsw.exe改名为自定义的名字,如print.exe
创建.xml配置文件(注:需与上面修改的名字相同 如print.xml)
内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<configuration>
<!-- service服务的id -->
<id>print</id>
<!-- service服务名 -->
<name>print-service</name>
<!-- service服务描述 -->
<description>websocket 打印服务</description>
<!-- 配置jar执行方式(下面的配置表示 使用JAVA_HOME目录下的java.exe去启动jar,即java -jar print.jar) -->
<!-- 此处也可配置其它执行命令,不一定是 java -jar -->
<env name="JAVA_HOME" value="%JAVA_HOME%"/>
<executable>java</executable>
<arguments>-jar "print.jar"</arguments>
<startmode>Automatic</startmode>
<!-- 服务启动的日志目录 -->
<logpath>%BASE%\log</logpath>
<logmode>rotate</logmode>
</configuration>创建服务
cmd管理员到当前目录下
- 新增windows服务
1
print.exe install
- 删除windows服务
1
print.exe uninstall
启动服务
windows运行 services.msc,找到新增的服务启动
原理分析与解释
启动服务成功后查看运行程序的详情,出现两个程序
一个是windows服务程序(依托于java环境启动的,作用是使程序开机自启)
一个是启动的jar程序,该程序由winsw.exe 执行 java -jar xxxx.jar命令启动的
启动程序不会影响 运行jar包程序
缺点:启动程序需要JDK配置环境
本质:就是创建一个执行一条命令的windows服务
由于工作中用到的是单项目,则为了方便,写了其它bat来方便注册启动与卸载
- xml配置
1 | <configuration> |
- 注册
1 | @echo |
- 卸载
1 | @echo |
- 开启服务
1 | @echo |
- 关闭服务
1 | @echo |
成功案例二 nssm
使用第三方nssm程序,原理为注册window服务启动nssm.exe,再由nssm.exe启动java程序
下载nssm程序软件 下载地址
官方常用命令 地址
创建服务
- 新增windows服务
1
2nssm install 服务名 执行文件路径 若文件需要其它程序执行如jar,可以创建bat文件,将此处的bat作为执行文件
nssm install printService %cd%\print.bat- 卸载window服务
1
2nssm remove 服务名
nssm remove printService启动服务
- 启动服务
1
nssm start printService
- 关闭服务
1
nssm stop printService
原理分析:与上面winsw原理一致
由于工作中用到的是单项目,则为了方便,写了其它bat来方便注册启动与卸载,与上面winsw一样
- 实际执行bat
1 | @echo |
- 注册
1 | %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit |
- 卸载
1 | %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit |
- 启动
1 | %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit |
- 关闭
1 | %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit |