我有一個可執行的JAR文件。是否可以創建該JAR的Windows服務?實際上,我只是想在啓動時運行它,但我不想將該JAR文件放入我的啓動文件夾中,既不在註冊表中。如何從java jar中創建windows服務?
回答
這篇文章將告訴你所有你需要知道: "Running Java Applications as a Windows Service";它提到使用「Java Service Wrapper」(有一個叫YAJSW一個社區版)
http://yajsw.sourceforge.net/ – Ben 2013-09-30 04:50:43
狸改變許可JSW的前一段時間,如果我是開始的一個項目,我就又用另一個Java服務包裝,http://yajsw.sourceforge.net/即是多了還是少一個模仿JWS的開源實現,然後構建它並進一步改進它。
編輯:我一直在使用YAJSW幾年在幾個platorms(在Windows,Linux版本的幾個...),這是巨大的,發展是持續的。
我一直在嘗試與Apache Commons Daemon。它支持Windows(Procrun)和UNIX(Jsvc)。高級安裝程序有一個Java Service tutorial與下載示例項目。如果您將javaservice.jar作爲Windows服務運行,則可以使用「telnet 4444」進行測試。我使用他們的例子,因爲我的重點是讓一個Java的Windows服務運行,而不是寫Java。
對於Windows服務[WinRun4j](http://winrun4j.sourceforge.net/)也是一個不錯的選擇,它可以兼容Java啓動器或服務包裝器 – mcdon 2014-11-07 14:57:42
隨着procrun需要prunsrv複製到應用程序目錄(download),並創建一個這樣的INSTALL.BAT:
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(for例如在Spring中使用context.registerShutdownHook())...
- 不在jar外使用相對路徑(例如log4j應該與一起使用log4j.appender.X.File = $ {app.home}/logs /my.log或東西一樣)
檢查procrun manual和this tutorial以獲取更多信息。
有沒有你可以分享的任何例子? – 2013-06-12 11:29:01
是的:看到上面的那個:-)你還需要什麼? – BTakacs 2013-06-17 09:02:37
感謝BTakacs,我已經檢查過你的教程,它工作正常。但不幸的是,這並沒有解決我想要做的事情..我試圖從C#中實現。 – 2013-06-17 10:13:45
我發現這個迄今爲止最簡單的解決方案是Non-Sucking Service Manager
用法是
nssm install <servicename> "C:\Program Files\Java\jre7\java.exe" "-jar <path-to-jar-file>"
使用nssm.exe但記得要設置AppDirectory或任何需要的庫或資源將無法訪問。默認情況下,nssm將當前工作目錄設置爲應用程序的java.exe,而不是jar。 所以這樣做是爲了創建一個批處理腳本:
pushd <path-to-jar>
nssm.exe install "<service-name>" "<path-to-java.exe>" "-jar <name-of-jar>"
nssm.exe set "<service-name>" AppDirectory "<path-to-jar>"
這應該可以解決服務暫停的問題。
這很好...您應該將它添加爲對kopernik答案的評論。 – 2016-11-29 16:47:59
創建服務後設置AppDirectory在我的情況下失敗。但是你可以用'nssm install
- 1. 從jar文件創建windows服務
- 2. 創建Windows服務
- 3. 如何在Delphi中創建Windows服務?
- 4. 在windows中創建服務
- 5. 使用java創建Windows服務
- 6. 如何通過另一個Windows服務創建Windows服務
- 7. 如何從Windows服務獲取數據(由WCF創建 - 與Windows服務通信)?
- 8. 如何使用winrun4j創建Windows服務
- 9. 如何使用launch4j創建Windows服務?
- 10. 如何使用JRuby創建Windows服務?
- 11. 如何創建芹菜Windows服務?
- 12. 如何手動創建Apache Windows服務
- 13. 如何從Windows中的文件夾創建一個jar文件?
- 14. 創建Windows服務時
- 15. 如何創建像Windows服務一樣運行的Android服務?
- 16. Java :: ANT創建Jar
- 17. Netbeans java創建jar
- 18. 如何從.vbs文件創建Windows服務?
- 19. 如何從Eclipse RCP應用程序創建Windows服務?
- 20. Java - 從可用類創建Web服務
- 21. 在delphi中創建Windows服務
- 22. 如何從Google Appengine Java項目中創建一個jar文件
- 23. 如何從java中的jar文件創建.exe文件?
- 24. 如何從Java程序中創建Jar文件
- 25. 從java啓動windows服務
- 26. 在vb6中創建一個Windows服務
- 27. 如何從服務器創建腳本
- 28. 如何在Windows Server 2008上將java .jar文件作爲Windows服務運行?
- 29. 創建Java RESTful Web服務
- 30. 創建的Java Web服務
未在註冊表中也?那你爲什麼要把它作爲一項服務? – 2009-10-24 09:17:49
@ o.k.w是正確的,如果你正在創建Windows服務,它會在註冊表中創建條目。 – 2014-09-10 11:28:27
我認爲這個用戶的意思是「作爲服務運行,而不是從啓動註冊表項作爲非服務運行」 – 2016-09-14 13:54:58