文章目录
- 用到的工具
- 先上一个效果图
- 准备可执行文件
- 注册及启动服务
前段时间遇到一个项目,需要我们提供一个驱动控件,可以以后台服务的方式运行在Windows机器上。开始寻找各种解决办法。
最后发现一个不错的解决方式。分享给大家一下。
用到的工具
链接:https://pan.baidu.com/s/1QNnMgGF--lEQ8aFk5k8OUQ
提取码:xjmg
先上一个效果图
准备可执行文件
我这里的是 scan-xxx-server.jar 只要这个文件 在Windows上 java -jar xxxx.jar命令下,可以启动就行。
但是这种java -jar的方式,客户端侧一旦关闭 cmd窗口 就服务停止了。接下来讲解怎么以后台服务的形式运行。
先上张图:
bin目录下
:放的是
通过 允许 wrapper.exe程序 来加载配置文件wrapper.conf进而启动jvm和并将指定的服务注册到本地服务中。
conf目录下
:
这个配置文件的重点部分如下:
wrapper.java.command=java
wrapper.java.command=../jre/bin/java.exe
wrapper.java.command.loglevel=INFO
wrapper.java.classpath.1=../lib/wrapper.jar
wrapper.java.classpath.2=../mylib/*.jar #自己的可执行文件的jar及其依赖的包位置
wrapper.java.library.path.1=../lib #需要的dll库放到这里,好像不太生效,项目中使用了JNI,用到的dll库放到了 jre\\bin目录下了
wrapper.logfile=../logs/wrapper.log #服务中打印的日志存放位置
wrapper.logfile.loglevel=INFO #文件日志中的日志级别
wrapper.name=ScanServer # 服务名称
wrapper.displayname=ScanServer # 服务名称 和上一个都写一样就行,具体不太清楚区别
wrapper.description=某某服务控件 # 本地服务的描述信息
wrapper.ntservice.starttype=AUTO_START #选择这个会注册服务为自动,下次开机 服务会自启。(但是首次注册还是要通过命令启动,下面bat脚本里有启动命令说明)
关于配置文件中的主类要格外注意,并不是指的自己可执行文件中的那个启动类。
要按下面来配:
# Java Main class. This class must implement the WrapperListener interface
# or guarantee that the WrapperManager class is initialized. Helper
# classes are provided to do this for you. See the Integration section
# of the documentation for details.
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
# wrapper.app.parameter.1=cn.com.yuanquanyun.controller.platform.CustomerApplication
# springboot
wrapper.app.parameter.1=org.springframework.boot.loader.JarLauncher
# wrapper.app.parameter.1=cn.com.jit.bootstrap.ScanClientServerApplication
jre目录下
:
这个就是java项目运行环境jre。项目中用到的dll或者so库可以直接放到jre/bin目录下。
lang目录下
:
暂时为空,应该放语言包之类的东西,不影响服务运行。
lib目录下
:
这里放的是wrapper.exe允许时,需要的必要依赖。
log目录下
:
这个就是存放日志的地方。
mylib目录下
:
这个地方就是存放 要注册为本地服务的可执行文件
这个upkcs11.ini文件暂且不用管,放到里面就行。
启动脚本
:
主要用到的是 服务注册启动脚本.bat
SC QUERY "ScanServer" > NUL
IF not ERRORLEVEL 1 GOTO EXISTGOTO NOTEXIST
:NOTEXIST
ECHO not exist "ScanServer" service
echo 创建Windows服务
bin\wrapper.exe -i ..\conf\wrapper.conf
:echo 修改服务的描述 -- 用不到了 配置文件加了描述
:sc description ScanServer "石化扫码签控件"
echo 启动服务
net start ScanServerGOTO END:EXIST
ECHO 服务已存在
ECHO exist "ScanServer" service
GOTO END:END
echo 键盘上随意按一个键退出&pause>nul
注意在bat脚本中 : 有两个含义。
一种是 GOTO 后面 需要跳到的地方。
另一种是 注释。也就是 不执行。
是哪一种含义 一般 :后是大写的一般都有对应的 GOTO 后的标识与其对应。
这里如果想要执行完自动关闭 cmd窗口 最后只需改为
:END
:退出
exit
注册及启动服务
Ctrl + R 后,在输入框中输入 services.msc 打开本地服务列表
如果发现描述或者服务名称错误了。
只能删除服务,然后重启再注册。
如果服务在启动状态下,先 执行 net stop 服务名。然后 执行 sc delete 服务名。
刷新服务列表就看不到这一条服务了。