bat 添加系统服务 wrapper
来源:互联网 发布:关于创业的软件 编辑:程序博客网 时间:2024/06/07 11:36
使用sc create 虽然能够添加服务由于程序,不符合win service的规范,所以不能作为服务启动。使用wrapper可以解决该问题。只需要实现对应的就接口,把对应的启动函数添加到start函数中。然后使用wrapper\bin中的注册服务的批处理脚本即可完成你自己java程序的启动。(它是收费的!!!只能坚持15分钟!!)
参考文章:http://www.blogjava.net/vwpolo/archive/2009/08/05/289925.html
首先在官网下载:http://wrapper.tanukisoftware.org/ (我是win7 32位的操作系统所以选择了win x86的版本。)
解压后可以看到目录结构如下:
这里面需要配置的有
conf/wrapper.conf配置你自己启动对象。
lib/实现WrapperListener接口的jar包与工程相关的jar包添加到该目录下。
bin/InstallTestWrapper-NT.bat 根据conf中的配置启动你的jar注册成系统服务。
首先看一下是WrapperListener的实现。
我获得了工程的jar包,知道启动的main函数所在的类。
首先创建工程把工程的jar包与wrapper.jar添加到工程目录中。
实现代码如下:
根据注释你只要把你的启动的main函数所在对象实现,并调用main函数即可。注意启动的时间要控制在30秒内,否则最好使用多线程修改你的main使之能30秒内启动。
package gxlu.it.regWinService;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import org.tanukisoftware.wrapper.WrapperListener;import org.tanukisoftware.wrapper.WrapperManager;import org.tanukisoftware.wrapper.event.WrapperEvent;import org.tanukisoftware.wrapper.event.WrapperEventListener;import gx.dwdm.process.MainController;public class DemoListener implements WrapperListener{/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString[] newStrArgs = new String[args.length + 1]; newStrArgs[0] = System.getProperty("jetty.home") + "etc/jetty-win32-service.xml"; for (int i = 0; i < args.length; ++i) { newStrArgs[(i + 1)] = args[i]; } WrapperManager.start(new DemoListener(), newStrArgs);}public void controlEvent(int event) {// TODO Auto-generated method stub if ((WrapperManager.isControlledByNativeWrapper()) || ((event != 200) && (event != 201) && (event != 203))) return; WrapperManager.stop(0);}public Integer start(String[] arg0) {// TODO Auto-generated method stub/***把你的启动代码添加到这里就可以了 -- start 工程是别人写的,只知道main函数所在的类MainController即可, 像调用其他public函数一样调用main函数就可以了。 不会需要对你已经完成工程进行大的调整。 */MainController mc = new MainController();mc.main(arg0);/***把你的启动代码添加到这里就可以了 -- end */return null;}public int stop(int code) {// TODO Auto-generated method stub try { System.out.println("WrapperListener: Stopping DemoListener!!!"); return code; } catch (Exception e) { System.out.println("Stop Server Error"); e.printStackTrace(); } return -1;}}
然后把该对象导出成jar,导出为myService.jar。
工程相关的jar为:ojdbc.jar ,log4j.jar, processarch.jar
配置wrapper.conf配置
这里主页介绍一下wrapper.conf的配置,这个配置文件是Java常用的属性文件格式,
wrapper.java.command=java: 指定要运行的Java,如果你不想设置环境变量的话,你也可以指定JDK的bin文件路径
wrapper.java.mainclass=gxlu.it.regWinService.DemoListener
: 指定要运行的类,这个类必须实现WrapperListener接口和接口中的start和stop方法,通过WrapperManager类来初始化服务。如果启动服务过程中出现与不能取得JVM信息的情况,可能是接口实现的问题。
wrapper.java.classpath.1=../lib/wrapper.jar:配置Java的类路径,这里的将wrapper.jar也包含在内,这里可以设置参数的位置,而且这个位置必须得从1开始,不能跳过,必须顺序指定,指定类路径的时候还有根据依赖关系来排列,被依赖的排在前面,否则会出现ClassNotFoundException的错误,这里支持觉得路径和相对路径,也支持通配符"*",比如wrapper.java.classpath.1=../lib/wrapper*,不过这个通配符只能用于匹配文件名,不能用于匹配文件夹名称。
wrapper.java.library.path.2=../lib/log4j.jar:指定Wrapper自带的类库文件存放文件夹,比如Wrapper.DLL文件等,只要指定到对应的上级目录名称就行,支持通配符。
wrapper.java.library.path.3=../lib/ojdbc.jar:指定Wrapper自带的类库文件存放文件夹,比如Wrapper.DLL文件等,只要指定到对应的上级目录名称就行,支持通配符。
wrapper.app.parameter.4= ../lib/processarch.jar:指定运行类的main方法参数。
wrapper.app.parameter.5= ../lib/myService.jar:指定运行类的main方法参数。
wrapper.daemonize=TRUE:将服务注册成守护线程,就算程序关闭的话不影响服务的运行
wrapper.ntservice.hide-console=false:不显示控制台
wrapper.filter.trigger.1= , wrapper.filter.action.1 :指定过滤器和触发器,可以对控制台的输出信息进行监听,然后触发相应的操作
wrapper.disable_shutdown_hook=TRUE:是否禁用 "关闭Hook" ,关闭的话在出现一般异常的情况下面可以忽略掉异常继续执行
wrapper.console.loglevel=INFO:配置控制台的显示信息的级别,NONE不显示任何输出信息,FATAL只显示致命的错误消息,ERROR显示所有的错误消息,STATUS显示服务状态的改变,包括服务启动和停止等信息,INFO显示所有程序输出的信息和JVM显示的信息,如果程序无法正常启动,可以使用DEBUG显示详细的调试信息。
wrapper.logfile.loglevel=INFO:配置日志记录文件要记录的输出信息的级别,参数值和wrapper.console.loglevel功能一致
wrapper.logfile.maxsize=0:配置日志文件的最大大小,如果为0表示不限制日志文件的大小,支持标记符,“k”代表KB,“m”代表MB,如果要设置最大大小为100KB的话可以这样:wrapper.logfile.maxsize=100k
wrapper.console.title=Wrapper Demo :控制台窗口显示标题,
wrapper.ntservice.name=testwrapper:系统服务的名称,
wrapper.ntservice.displayname=Wrapper Demo:在服务管理中显示的名称
wrapper.ntservice.description=Wrapper Demo的介绍信息: 在服务管理器显示服务的描述信息
wrapper.ntservice.starttype=AUTO_START: 配置服务启动方式,可以选择AUTO_START(自动)和DEMAND_START(手动)两种方式。默认为自动。
PS:注意红色标注的位置是特别关键的,其他选项如果没有特殊要求不改也没有关系。先跑起来,以后有需要在慢慢调整。
wrapper.java.classpath. 配置你需要的全部jar包。工程的还有你实现wrapperListener的jar包等。
wrapper.java.mainClass 配置你的实现了WrapperListener的对象。这里我配置上面的对象gxlu.it.regWinService.DemoListener。
注册你自己的服务
进入到bin目录下运行InstallTestWrapper-NT.bat
这时打开你控制面板-》管理工具-》服务。会看到你已经注册成功的服务名称。根据现在的配置文件会显示为Wrapper Demo.
我的修改过了会显示为Test Wrapper Sample Application。
这时你的java程序就注册win服务成功了。
http://hi.baidu.com/406705/blog/item/08fdac1d5909636ef624e4af.html
win 下运行的一些bat脚本在启动后不想看到dos窗口,因为很容易被误关闭掉。而有不想转成EXE。那么添加为系统服务绝对是个不错的选择。
win下管理员权限运行CMD。
使用命令 sc create
举例:
C:\Windows\system32>sc create impService binPath= D:\impService\SynDataBaseNowForSystemTask.bat start= auto DisplayName= impService
[SC] CreateService 成功
解释:sc create为系统命令。 impService为自己的服务名称。binPath为bat文件路径。start为启动方式。DisplayName为在Service列表中看到的名称。
在CMD窗口里输入sc create可以看到对应的帮助信息,可以根据自己的需求配置对应的命令参数。
注意:=后面都有空格,输入sc create会有相关的命令提示,参考这个可以根据需求自己配置。
注册成功后结果如图:
删除创建的服务命令
sc delete
举例;
C:\Windows\system32>sc delete impService
[SC] DeleteService 成功
解释;sc delete 系统命令。 impService为刚刚导入的系统服务名称。
- bat 添加系统服务 wrapper
- Windows添加系统服务与glassfish bat启动文件
- Windows添加系统服务与glassfish bat启动文件
- bat启动系统服务
- atitit.添加win 系统服务 bat批处理程序服务的法总结instsrv srvany java linux
- 批处理,bat,系统服务处理
- 将bat注册系统服务
- 通过BAT添加系统环境变量
- JAVA加入windows系统服务(Java Service Wrapper)
- 将java程序注册为系统服务(wrapper.jar)
- java Service Wrapper 将jar注册为windows系统服务
- 使用Wrapper创建java的window系统服务
- 使用Wrapper创建Java的window系统服务
- Java Service Wrapper 将Java程序部署成系统服务
- 创建 bat 添加和删除 服务
- 备份系统服务的批处理bat
- bat脚本 手动启动系统服务
- 将bat文件注册成为系统服务
- Filter和listener的区别
- 移植NET-SNMP(ARM 9)总结
- App再瘦身
- 简化界面,移除无用元素
- 传说中的ACM大牛!!!
- bat 添加系统服务 wrapper
- IOS 获取UIView触摸响应事件
- 外贸网站的8个经营法则
- Google Map开发系列(十)——给你的地图加上API提供的默认控件
- Adobe AIR中的 SQLite 数据库简介
- 一位ACMer过来人的心得
- 流媒体解决方案
- 描述 private、protected、internal和public修饰符的
- 苹果宣布Bob Mansfield继续留任