方案一:
工具:
Instsrv.exe(可以给系统安装和删除服务)
Srvany.exe(可以让程序以服务的方式运行)
下载路径:
点此处进入下载页面
步骤:
1 将下载的工具解压到某文件路径,如D:\Software\让程序作为服务运行 目录下
2 假设注册的服务名为testLiliaService,cmd进入Dos环境下(管理员运行),执行命令,注册testLiliaService服务
D:\Software\让程序作为服务运行\instsrv.exe testLiliaService D:\Software\让程序作为服务运行\srvany.exe
3 让程序绑定到服务上
1)运行regedit打开注册表编辑器,然后进入注册表在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下找到刚刚注册的服务名testLiliaService
2)右击testLiliaService新建一个项,名称为“Parameters”,单击选中它然后在右侧的窗口新建一个字符串值名称为“Application”,将其值设置为你针要做为服务运行的程序的路径,例如我的路径为“D:\\tools\\test.bat”。
3)这里特别要注意的是程序路径一定要写得跟前面的例子一样,也是就是中间是用双斜杠隔开,不然服务没办法自动启动。
4)然后可以再建立一个AppDirectory指定程序运行的初始目录(可选)。
5)如果你需要把自己注册的服务做得看起来更专业也更好理解的话还可以继续新建一个字符串值名称为“Description”,在其值里面你可以输入你想显示的服务描述。
4 启动服务
1)在运行中输入“services.msc”并回车,在列表中找到我们刚添加的testLiliaService服务,双击打开,来做详细的设置。在“General”选项卡上,我们需要设置这个服务的运行方式,在图二中可以看见,作为一个服务,有“自动(Automatic)”,“手动(Manual)”和“禁止(Disabled)”三种启动类型,按照需要,我们一般设置成自动就可以了。
2)而在“Logon”选项卡下可以设置以什么身份运行这个服务,一般可以不用理会,按照默认的设置。“Recovery”选项卡下则是进行恢复设置的,你可以指定,在服务第一次,第二次和第三次出错之后分别采取什么措施。
3)“Dependencies”则显示了服务之间的依存关系,可以让你察看这个服务的运行依赖哪些其它服务,以及还有什么服务依赖于这个服务。这后面几个对我们一般用户没有什么意义。经过这些设置,你的服务已经完全可以正常工作了。
这样程序就可以作为服务启动了,服务设置为自动的启动类型,重启电脑,会发现程序会自动启动的。
5 删除注册的服务
首先停止服务,然后用命令
D:\Software\让程序作为服务运行\instsrv.exe testLiliaService remove
删除服务之后手动删一下注册表,最后再重启一下电脑,这个服务就彻底删除了
方案一弊端:程序开机启动后,不能显示出jar包运行的黑窗口,在关闭程序和重启时必须进入进程中,手动杀死。另外进程与程序的生命周期不绑定,服务关闭了,但程序的进程不一定未关闭,若一个服务启动绑定多个程序,管理起来不方便,因为在进程中只会显示到jdk位置,多个程序不好区分。
方案二:
使用Java Service Wrapper,方案二与方案一实现的原理是一样的,注册一个服务,然后把程序启动入口与服务配置在一起
网上很多人推荐用这种方式实现java程序注册为windows服务。
1 下载java service wrapper
网址:http://sourceforge.net/projects/wrapper/ 或者 http://wrapper.tanukisoftware.com/doc/english/download.jsp
我下载的版本是wrapper-windows-x86-32-3.5.20.zip。
2 配置过程
1)首先确定你的电脑上有java运行环境,没有的话请安装。
2)将你的java程序打包成jar包。(我的jar的名称为JavaServiceTest.jar,main方法所在类JavaServiceTest)
3)在硬盘上创建文件夹test, 并在其下创建文件夹bin, conf, lib, logs。
4)解压wrapper-windows-x86-32-3.5.20.zip, 并将其bin目录下的Wrapper.exe、src/bin目录下的App.bat.in、InstallApp-NT.bat.in、UninstallApp-NT.bat.in文件
拷贝到test的bin目录中,其中后面三个分别改名为App.bat、InstallApp-NT.bat、UninstallApp-NT.bat。
5)将其lib目录下的Wrapper.DLL、wrapper.jar拷贝到test的lib目录中。并且将项目的jar和所用到的jar都拷贝到该目录(包括你自己的java程序jar)。
6)将其src/conf目录下的wrapper.conf.in拷贝到workapp的conf目录中,并命名为wrapper.conf。
3 修改wrapper.conf文件
主要修改下面几项:
1)JVM位置:
wrapper.java.command=C:\jdk1.5.0_07\bin\java 或者 wrapper.java.command=%JAVA_HOME%/bin/java(需要在系统的环境变量里配置JAVA_HOME)
2)MAIN CLASS 此处决定了使用Java Service Wrapper的方式
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
3)你的Java程序所需的jar包必须全部在此标明,注意路径准确:
wrapper.java.classpath.1=../lib/JavaServiceTest.jar
wrapper.java.classpath.2=../lib/wrapper.jar
wrapper.java.classpath.3=../lib/sqljdbc4.jar
……
4)你的Wrapper.DLL或wrapper.jar所在的目录
wrapper.java.library.path.1=../lib
5)你的Java应用程序的运行类(主类)
wrapper.app.parameter.1=com.test.JavaServiceTest
6)注册为服务的名称和显示名,你可以随意进行设置
wrapper.name=testwrapper
wrapper.displayname= Test Wrapper Sample Application
7)服务描述信息
wrapper.description= Test Wrapper Sample Application Description
8)服务的启动类型
# Mode in which the service is installed. AUTO_START, DELAY_START or DEMAND_START
wrapper.ntservice.starttype=AUTO_START
4 修改好了以后,运行MyApp.bat即可运行你的java程序,这里可以测试配置的是否正确,如果可以运行,证明配置ok。
5 运行InstallApp-NT.bat可以进行服务的注册,UninstallApp-NT.bat为注销服务。
6 运行完注册服务InstallApp-NT.bat可以在 控制面板-管理程序-服务中看到你注册的服务名称。(如:Test Wrapper Sample Application)
方案二弊端:第一点,程序使用的所有jar包都需要在wrapper.conf中说明,如果程序遗漏了在这里配置的包时,就会出现问题。当项目有很多包时,那真的排查问题就非常痛苦了。第二点,这里是每个程序注册成一个服务,若程序有多个,就会注册很多的个人服务。第三点:Java Service Wrapper包含专业版,稳定版和社区版,专业版和稳定版都需要license,是收费的。社区版不收费,但社区版只支持windows 32位的系统,64位系统暂不支持。
方案三:(推荐)
方案三是使用windows自己的程序自启动功能。然后利用bat文件的start命令,实现一个bat文件启动多个java程序的功能
1 将需要开机自启动的程序放在文件夹software下
s s
2 每个文件夹放置好启动需要的jar包和配置文件
3 在software目录下,编写总启动文件,步骤1中的javaProgramStart.bat文件,内容为
注意这里的start是必须的,不然后面的程序不能启动起来(单线程运行这些程序)
4 创建javaProgramStart.bat的快捷方式,将快捷方式放到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp目录下
5 在程序启动时,就会自行启动software配置下的程序