win自启动jar包两种方式
公司业务跑的Jar包,在linux上倒是好弄,直接用脚本后台运行,启动关闭也方便。但在windows环境跑都是用cmd窗口跑,容易遇到服务器断电关闭后不能及时启动,或者人为误操作导致服务停止,为避免每次去手动启动麻烦的很,就想搞个windows服务,让它能后台运行,还可以开机自启。
方式一
将jar包做成exe服务,可以实现自启动的方式。
方式二
将jar使用bat脚本启动,再通过vbs脚本控制bat脚本后台启动,避免黑窗口的出现,进行开启自启动。
方式一:服务模式
-
环境安装,电脑需要安装Microsoft.NETFramework 4,如果有的话可以不安装
-
将下载到两个文件放到jar包所在的目录中
-
重命名为和xxx.jar包同名的xxx.exe、xxx.xml两份文件
-
编辑xxx.xml文件
<service> <!-- 删除服务时的w唯一ID标识 --> <id>xxx</id> <!-- 展示在服务列表里的名字 --> <name>xxx</name> <!-- 简介 --> <description>xxx微服务</description> <!-- JAVA环境变量 --> <env name="JAVA_HOME" value="%JAVA_HOME%"/> <executable>java</executable> <!-- JAVA启动命令参数 由 java -jar path 决定 --> <arguments>-jar "%BASE%\xxx.jar"</arguments> <!-- 开机启动 --> <startmode>Automatic</startmode> <!-- 日志配置路径 --> <logpath>%BASE%\log</logpath> <logmode>rotate</logmode> </service>
-
在当前目录中进入CMD黑窗口,执行
xxx.exe install
命令,这样服务中已经存在了 -
WIN+R输入services.msc,就可以看到以xxx名字命名的服务
-
CMD黑窗口其它命令
### 安装服务 xxx.exe install ### 重启服务 xxx.exe restart ### 停止服务 xxx.exe stop ### 卸载服务 xxxx.exe uninstall
-
到此为止,已完成服务自启动功能,以下是为了方便,也可以使用bat脚本启动
-
启动服务,新建start.bat文件,并编辑内容
@ECHO OFF setlocal EnableDelayedExpansion color 3e ### 黑窗口标题(仅注释,实际需要删除此内容) title xxx PUSHD %~DP0 & cd /d "%~dp0" %1 %2 mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof :runas ### 安装服务命令(仅注释,实际需要删除此内容) xxx.exe install ### 启动服务命令(仅注释,实际需要删除此内容) net start xxx echo 执行完毕,任意键退出 pause >nul exit
-
停止服务,新建stop.bat文件,并编辑内容
@ECHO OFF setlocal EnableDelayedExpansion color 3e ### 黑窗口标题(仅注释,实际需要删除此内容) title xxx PUSHD %~DP0 & cd /d "%~dp0" %1 %2 mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof :runas ### 停止服务命令(仅注释,实际需要删除此内容) net stop xxx ### 卸载服务命令(仅注释,实际需要删除此内容),是否需要卸载根据实际情况决定 xxx.exe uninstall echo 执行完毕,任意键退出 pause >nul exit
方式二:脚本
-
在jar包同级目录下新建start.bat和stop.bat文件,并编辑内容
-
启动start.bat内容编辑
:: 指定字符集utf-8 chcp 65001 @echo off title 准备启动设备驱动................... color 3E start javaw -Dfile.encoding=utf-8 -jar xxx.jar echo . echo ------------ 正在启动 -------------- echo . :: 10秒后启动完成 timeout /t 10 echo . echo ------------ 启动成功 -------------- echo . timeout /t 2 exit
-
停止stop.bat内容编辑
chcp 65001 @echo off title 停止设备驱动 color 3E taskkill -f -t -im javaw.exe echo . echo ------------停止成功!-------------------- echo . timeout /t 5 exit
-
到了这一步,其实就可以实现后台启动了,但是并非开机自启动。想要实现还需创建init.vbs脚本执行,避免开启自启动时出现黑窗口
-
编辑init.vbs内容,最后的0表示cmd窗口隐藏运行,路径不要有中文
set ws=WScript.CreateObject("WScript.Shell")
ws.Run "目标路径\start.bat /start",0
-
通过WIN+R输入shell:startup,打开win自启动文件夹目录
-
最后,将init.vbs快捷方式直接放到自启动文件夹目录中,这样就可以实现开机自启动功能
转载自:https://juejin.cn/post/7210375522513469495