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,如果你不想设置环境变量的话,你也可以指定JDKbin文件路径

   wrapper.java.mainclass=gxlu.it.regWinService.DemoListener
: 指定要运行的类,这个类必须实现WrapperListener接口和接口中的startstop方法,通过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为刚刚导入的系统服务名称。

 

 

 

 

原创粉丝点击