2009-10-24 15 views
42

Mam plik wykonywalny JAR. Czy jest możliwe utworzenie usługi Windows tego JAR? Właściwie to po prostu chcę uruchomić to przy starcie, ale nie chcę umieszczać tego pliku JAR w moim folderze startowym, ani w rejestrze.Jak utworzyć usługę Windows z słoika Java?

+1

Nie jesteś również w rejestrze?Więc dlaczego chcesz to jako usługa? –

+0

@ o.k.w ma rację, jeśli tworzysz usługę Windows, utworzy wpis w rejestrze. –

+0

Myślę, że ten użytkownik oznaczał "działa jako usługa, a nie z kluczy rejestru startowego jako non-service" –

Odpowiedz

6

Tanuki zmienił licencja JSW jakiś czas temu, gdybym miał się rozpocząć projekt, użyłbym Yet Another Java Usługa Wrapper, http://yajsw.sourceforge.net/ że jest bardziej lub mniej implementacji open source, która naśladuje JWS, a następnie buduje na nim i jeszcze bardziej ulepsza.

EDYTOWANIE: Używam YAJSW od kilku lat na kilku platormach (Windows, kilka linuxes ...) i jest świetnie, rozwój jest w toku.

9

Eksperymentowałem z Apache Commons Daemon. Obsługuje okna (Procrun) i unix (Jsvc). Zaawansowany instalator ma Java Service tutorial z przykładowym projektem do pobrania. Jeśli otrzymasz plik javaservice.jar działający jako usługa systemu Windows, możesz przetestować go za pomocą "telnet 4444". Użyłem ich przykładu, ponieważ skupiłem się na uruchomieniu usługi java Windows, a nie pisaniu java.

+0

Dla usługi Windows [WinRun4j] (http://winrun4j.sourceforge.net/) jest również dobrym kandydatem.Może się podwoić jako Java Launcher lub Service Wrapper – mcdon

2

Z procrun trzeba skopiować prunsrv do katalogu aplikacji (download) i utworzyć install.bat takiego:

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% 

Przypuszczam do

  • metę to z tego samego katalogu gdzie słoik i prunsrv.exe jest
  • słoik ma działającą MANIFEST.MF
  • i masz haki zamknięcia zarejestrowane w JVM (dla przy użyciu context.registerShutdownHook() na wiosnę) ...
  • nie używa względnych ścieżek dla plików poza słojem (na przykład log4j powinien być używany z log4j.appender.X.File = $ {app.home}/logs /my.log lub coś podobnie)

Sprawdź procrun manual i this tutorial aby uzyskać więcej informacji.

+0

czy istnieje przykład, który można udostępnić? –

+0

tak: patrz powyższy :-) czego jeszcze potrzebujesz? – BTakacs

+0

Dzięki BTakacs, już sprawdziłem twój tutorial i wszystko działało dobrze. Ale niestety to nie rozwiązało tego, co chciałem zrobić. Próbuję to osiągnąć teraz z C#. –

36

Najprostszym rozwiązaniem znalazłem za to jakim jest Non-Sucking Service Manager

Wykorzystanie byłoby

nssm install <servicename> "C:\Program Files\Java\jre7\java.exe" "-jar <path-to-jar-file>" 
+7

Zrobiłem to samo i zainstalowałem pomyślnie, ale jak tylko uruchomię to, mówi "nieoczekiwany status SERVICE-PAUSED w Odpowiedź na START control' – aneela

+0

@kopernik, To samo dzieje się też dla mnie .. pomóżcie proszę .. – Shakthi

+0

Ten sam problem, o którym wspomniałeś. Masz pojęcie, co jest nie tak? –

9

Zastosowanie nssm.exe ale należy pamiętać, aby ustawić AppDirectory lub wszelkich wymaganych bibliotek lub zasoby nie będą dostępne . Domyślnie nssm ustawia bieżący katalog roboczy na katalog aplikacji java.exe, a nie na jar. Więc to zrobić, aby utworzyć skrypt wsadowy:

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>" 

To powinno rozwiązać problem usługa wstrzymana.

+1

To dobrze ... Powinieneś dodać to jako komentarz do odpowiedzi kopernika. –

+0

Ustawienie usługi AppDirectory po utworzeniu usługi nie powiodło się w moim przypadku. Ale możesz uruchomić gui z 'nssm install ' i ustawić AppDirectory, jak również inne użyteczne parametry, takie jak pliki dziennika tam i stworzyć usługę za jednym zamachem – JCvanDamme

Powiązane problemy