将JAR作为Windows服务运行
我有一个JAR文件,我想注册并将其作为Windows服务运行。 使用配置良好的JAR和已经注册的JVM关闭挂钩,这不应该是一项大工作。
我已经有了一个带有外部lib
目录的JAR,我可以用java -jar My.jar
启动它,然后用Ctrl+C
停止。
我还检查了Apache的JSL,JSmooth和procrun没有可行的解决方案。
我需要一个有良好教程的工作解决方案。
更新:我成功同时procrun(最后)和手动.net服务包装器……这是我的install.bat的procrun版本的代码:
set PR_PATH=%CD% SET PR_SERVICE_NAME=MyService SET PR_JAR=MyService.jar SET START_CLASS=org.my.Main SET START_METHOD=main SET STOP_CLASS=java.lang.System SET STOP_METHOD=exit rem ; separated values SET STOP_PARAMS=0 rem ; separated values SET JVM_OPTIONS=-Dapp.home=%PR_PATH% prunsrv.exe //IS//%PR_SERVICE_NAME% --Install="%PR_PATH%\prunsrv.exe" --Jvm=auto --Startup=auto --StartMode=jvm --StartClass=%START_CLASS% --StartMethod=%START_METHOD% --StopMode=jvm --StopClass=%STOP_CLASS% --StopMethod=%STOP_METHOD% ++StopParams=%STOP_PARAMS% --Classpath="%PR_PATH%\%PR_JAR%" --DisplayName="%PR_SERVICE_NAME%" ++JvmOptions=%JVM_OPTIONS%
我认为
- 从jar和prunsrv.exe所在的目录运行它
- jar有它的工作MANIFEST.MF
- 并且你有注册到JVM的关闭钩子(例如在Spring中使用context.registerShutdownHook())…
- 没有使用jar之外的文件的相对路径(例如log4j应该与log4j.appender.X.File = $ {app.home} /logs/my.log或类似的东西一起使用)
感谢apache procrun团队( http://commons.apache.org/proper/commons-daemon//procrun.html )和marifnst( http://a089lp.wordpress.com/tag/procrun-tutorial/ )
更新2 :winsv的一个新的好教程: https ://dzone.com/articles/spring-boot-as-a-windows-service-in-5-minutes
从这些样本中编写您自己的服务:
- http://www.codeproject.com/Articles/3990/Simple-Windows-Service-Sample
- http://msdn.microsoft.com/en-us/library/windows/desktop/bb540476%28v=vs.85%29.aspx?bcsi-ac-bbaf765720ef3335=20190C4200000503o7MxKbMq7UL6Af4O24rqKSGuh1gPAwAAAwUAAPvrLQAIBwAAbwEAAGhCCQA=
- http://code.msdn.microsoft.com/windowsdesktop/CppWindowsService-cacf4948?bcsi-ac-bbaf765720ef3335=20190C4200000503o7MxKbMq7UL6Af4O24rqKSGuh1gPAwAAAwUAAPvrLQAIBwAAbwEAAGhCCQA=
进入onStart
你必须做CreateProcess( "java", "-jar", "MyJar.jar" )
,保持其PID
进入onStop
你必须通过PID杀死
您可以使用Java Service Wrapper
http://wrapper.tanukisoftware.com/doc/english/download.jsp
他们不分发编译的x86_64 Windows版本的Comunity Edition,但你可以自己构建它。