将java程序运行为Windows服务
转自:http://blog.csdn.net/dragonbbc/archive/2007/02/08/1504985.aspx
评语:此技术我用在了php运行java接口的项目中,以保证服务稳定运行。
有两种方案,一是通过JavaService来运行,二是用exe4j转换成exe程序,分别举例如下:
一、JavaService
1.首先到http://javaservice.objectweb.org/下载JavaService,最新版本为2.0.10
2.解压JavaService-2.0.10.zip,将JavaService.exe拷到要运行的java程序目录下
3.进入命令行,切换到java程序目录,运行
JavaService -install 服务名 jvm.dll文件路径 -Djava.class.path=jar文件路径(如有多个用;隔开) -start 启动类 -out 输出重定向 -err 错误信息重定向 -current 工作目录 -depends 依赖的服务 -description 服务描述信息
例如:
JavaService -install SampleService "%JAVA_HOME%\jre\bin\server\jvm.dll" -Djava.class.path=%CD%\sample.jar;%CD%\mysql-connector-java-3.0.9-stable-bin.jar -start com.test.SampleService -out %CD%\stdout.log -err %CD%\stderr.log -current %CD% -depends mysql -description "测试Java服务"
卸载的时候为:
JavaService -uninstall 服务名
例如:
Javaservice -uninstall SampleService
二、通过exe4j将java程序转换为exe程序
1.首先到http://www.ej-technologies.com/download/exe4j/files.php下载exe4j,按向导安装
2.运行exe4j,1.Welcome,直接按Next→2.project type,这里有两个选择,Regular mode和"JAR in EXE" mode,默认即可(如果程序文件较少的话可以用"JAR in EXE",将所有文件打包成一个exe文件),Next
3.输入应用程序的名字和exe输出目录,Next
4.Executable type选Service,Executable name输入要生成的exe文件名,此处可以勾选Icon file,为生成的exe文件选择一个图标,点击Advanced options→设置输出重定向和错误重定向的文件,Next→Description输入服务描述信息,选择启动类型:自动运行(Auto start),手动运行(Start on demand),依赖的服务(Dependencies),Next到第五步Java invocation
5.Class path添加相应的jar文件,然后选择Main class,Next
6.Mininum version,输入最低要求的java版本,如1.3,然后一直Next到完成
7.安装服务,进入命令行,切换到相应目录,运行生成的exe文件加参数 -install,卸载服务为 -uninstall
其它命令:
-install-demand 安装为手动启动模式
-install-auto 安装为自动启动模式
-start 启动服务
-stop 停止服务
-status 服务启动状态
另外"-"也可以换成"--"或者"/"
三、通过exe4j还有另外一种方法,就是打包为GUI application,然后通过instsrv.exe和srvany.exe运行为windows服务,方法为在exe4j第四步的时候Executable type选GUI application,其它同上
安装为服务的方法,将instsrv.exe和srvany.exe拷入相应目录,进入命令行,切换到相应目录
instsrv 服务名 %CD%\srvany.exe
然后打开注册表,展开"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\服务名\Parameters"
新建一字符串值Application,输入生成的exe文件的路径
输入services.msc,找到相应服务,调节启动类型为自动,启动服务,OK!
instsrv.exe和srvany.exe下载地址:
http://www.electrasoft.com/srvany/srvany.exe
http://www.electrasoft.com/srvany/instsrv.exe
附:
exe4j是需要注册的,附上一个Exe4J v4.0.2的注册码:L-FLN#79829-19l6l0uowr1kw#585
补充:
服务有时候会崩溃,我的解决办法是
在windows下,通过PHP的win32扩展来检测和启动服务,需要在默认配置的php5上,添加php_win32service.dll扩展
如果是在linux下,可能就需要用shell脚本写一个守护进程了。