Właśnie odziedziczyłem aplikację Java, którą należy zainstalować jako usługę na XP i Vista. Minęło około 8 lat, odkąd korzystałem z systemu Windows w dowolnej formie i nigdy nie musiałem tworzyć usługi, nie mówiąc już o aplikacji Java (mam słoik na aplikację i jeden słoik zależności - log4j ). Jaka magia jest niezbędna, aby uruchomić tę usługę? Mam źródło, więc możliwe są modyfikacje kodu, choć najlepiej ich unikać.
java
windows-services
pomysłów
źródło
źródło
Odpowiedzi:
Miałem trochę szczęścia z pakietem Java Service Wrapper
źródło
Apache Commons Daemon to dobra alternatywa. Posiada Procrun dla usług Windows i Jsvc dla demonów unix. Używa mniej restrykcyjnej licencji Apache, a Apache Tomcat wykorzystuje ją jako część siebie do działania w systemach Windows i Linux! Aby to działało, jest trochę trudne, ale jest wyczerpujący artykuł z działającym przykładem.
Poza tym możesz spojrzeć na bin \ service.bat w Apache Tomcat, aby dowiedzieć się, jak skonfigurować usługę. W Tomcat zmieniają nazwy plików binarnych Procrun (prunsrv.exe -> tomcat6.exe, prunmgr.exe -> tomcat6w.exe).
Coś, z czym walczyłem przy użyciu Procrun, twoje metody start i stop muszą zaakceptować parametry (String [] argv). Na przykład „start (String [] argv)” i „stop (String [] argv)” będą działać, ale „start ()” i „stop ()” spowodują błędy. Jeśli nie możesz zmodyfikować tych połączeń, zastanów się nad stworzeniem klasy bootstrapper, która może masować te połączenia w zależności od potrzeb.
źródło
--JvmOptions=-Dopt=a#-Dopt2=b
. Z tego powodu uruchamiałem polecenie ze skryptu mrówki i przez kilka dni walczyłem. Mam nadzieję, że to pomoże.Dzięki Apache Commons Daemon możesz teraz mieć niestandardową nazwę i ikonę pliku wykonywalnego! Możesz również uzyskać niestandardowy monitor tacy Windows z własną nazwą i ikoną!
Mam teraz usługę uruchomioną z moją własną nazwą i ikoną (prunsrv.exe), a monitor zasobnika systemowego (prunmgr.exe) ma również własną nazwę i ikonę!
MyServiceName.exe
iMyServiceNamew.exe
.Pobierz WinRun4J i użyj
RCEDIT.exe
dołączonego programu, aby zmodyfikować plik wykonywalny Apache, aby osadzić własną ikonę:Teraz zainstaluj swoją usługę Windows w ten sposób ( więcej informacji i opcji znajdziesz w dokumentacji ):
Teraz masz usługę Windows swojego słoika, która będzie działać z Twoją własną ikoną i nazwą! Możesz także uruchomić plik monitora, który uruchomi się na pasku zadań z własną ikoną i nazwą.
źródło
Prostym sposobem jest opakowanie NSSM Wrapper ( zobacz mój wpis na blogu ).
źródło
Jeszcze jedną opcją jest WinRun4J . Jest to konfigurowalny program uruchamiający Java, który pełni również rolę hosta usługi Windows (zarówno wersja 32-, jak i 64-bitowa). Jest to oprogramowanie typu open source i nie ma żadnych ograniczeń w jego użyciu.
(pełne ujawnienie: pracuję nad tym projektem).
źródło
Jeszcze inną odpowiedzią jest Yet Another Java Service Wrapper , wydaje się to być dobrą alternatywą dla Java Service Wrapper, ponieważ ma lepsze licencje. Jest również przeznaczony do łatwego przenoszenia z JSW do YAJSW. Z pewnością dla mnie, nowość na serwerach Windows i próba uruchomienia aplikacji Java jako usługi, była bardzo łatwa w użyciu.
Niektóre inne znalazłem, ale nie wykorzystałem:
źródło
Myślę, że opakowanie usługi Java działa dobrze. Pamiętaj, że istnieją trzy sposoby integracji aplikacji. Wygląda na to, że opcja 1 będzie dla ciebie najlepsza, biorąc pod uwagę, że nie chcesz zmieniać kodu. Plik konfiguracyjny może trochę zwariować, ale pamiętaj tylko, że (dla opcji 1) program, który uruchamiasz i dla którego będziesz określał argumenty, to jego program pomocniczy, który następnie uruchomi Twój program. Mają do tego przykładowy plik konfiguracyjny .
źródło
Jeśli używasz narzędzia Gradle Build Tool, możesz wypróbować moją wtyczkę do usługi Windows , która ułatwia korzystanie z Apache Commons Daemon Procrun .
Aby utworzyć aplikację usługi Windows Java za pomocą wtyczki, musisz wykonać kilka prostych kroków.
Utwórz główną klasę usług za pomocą odpowiedniej metody.
Dołącz wtyczkę do swojego
build.gradle
pliku.Ten sam fragment skryptu dla nowego, inkubującego mechanizmu wtyczek wprowadzonego w wersji 2.1:
Skonfiguruj wtyczkę.
Uruchom zadanie gradate createWindowsService, aby utworzyć dystrybucję usługi Windows.
To wszystko, co musisz zrobić, aby stworzyć prostą usługę Windows. Wtyczka automatycznie pobierze pliki binarne Apache Commons Daemon Procrun, rozpakuje te pliki binarne do katalogu dystrybucji usługi i utworzy pliki wsadowe do instalacji / deinstalacji usługi.
W
${project.buildDir}/windows-service
katalogu znajdziesz pliki wykonywalne usługi, skrypty wsadowe do instalacji / deinstalacji usługi oraz wszystkie biblioteki wykonawcze. Aby zainstalować bieg usługi<project-name>-install.bat
i jeśli chcesz odinstalować bieg usługi<project-name>-uninstall.bat
. Aby uruchomić i zatrzymać usługę, użyj<project-name>w.exe
pliku wykonywalnego.Należy pamiętać, że uruchomienie usługi obsługi metody powinno utworzyć i uruchomić osobny wątek w celu przeprowadzenia przetwarzania, a następnie zwrócić. Główna metoda jest wywoływana z różnych wątków podczas uruchamiania i zatrzymywania usługi.
Aby uzyskać więcej informacji, przeczytaj o wtyczce i programie Apache Commons Daemon Procrun.
źródło
JavaService to LGPL. Jest to bardzo łatwe i stabilne. Wysoce rekomendowane.
źródło
Dzięki Javie 8 możemy poradzić sobie z tym scenariuszem bez żadnych zewnętrznych narzędzi. Narzędzie javapackager dostarczane z java 8 zapewnia opcję tworzenia samodzielnych pakietów aplikacji:
-natywny typ Generuj samodzielne pakiety aplikacji (jeśli to możliwe). Użyj opcji -B, aby podać argumenty używanym programom pakującym. Jeśli określono typ, tworzony jest tylko pakiet tego typu. Jeśli nie określono żadnego typu, używane jest wszystko.
Dla typu obowiązują następujące wartości:
W przypadku Windows zapoznaj się z następującym dokumentem , w razie potrzeby możemy utworzyć MSI lub exe.
źródło
Całkiem dobre porównanie różnych rozwiązań jest dostępne na stronie: http://yajsw.sourceforge.net/#mozTocId284533
Osobiście jak launch4j
źródło
to proste, ponieważ musisz wprowadzić skrót
Windows 7
C:\users\All Users\Start Menu\Programs\Startup
(administrator) lubUser home directory(%userProfile%)
Windows 10: w trakcie uruchamiania
shell:startup
w jego właściwości -> skrót -> cel ->
java.exe -jar D:\..\runJar.jar
UWAGA: Uruchomi się to dopiero po zalogowaniu
Z uprawnieniami administratora
sc create serviceName binpath= "java.exe -jar D:\..\runJar.jar"
Stworzy usługę Windowsjeśli masz limit czasu korzystania
cmd /c D:\JAVA7~1\jdk1.7.0_51\bin\java.exe -jar d:\jenkins\jenkins.war
, ale nawet z tym dostaniesz limit czasu, ale w tle java.exe zostanie uruchomiony. Sprawdź w menedżerze zadańUWAGA: Uruchomi się przy uruchomieniu systemu Windows podczas logowania (przed zalogowaniem, na podstawie usługi '
Startup Type
')Szczegółowe objaśnienie tworzenia usługi Windows
źródło
Użyj „ winsw ”, który został napisany dla Glassfish v3, ale ogólnie działa dobrze z programami Java.
Wymagaj zainstalowanego środowiska wykonawczego .NET.
źródło
Z powodzeniem korzystałem z JavaService . Nie był aktualizowany od kilku lat, ale był całkiem solidny, kiedy go używałem.
źródło
Nie podobało mi się licencjonowanie oprogramowania Java Service Wrapper. Poszedłem z ActiveState Perl, aby napisać usługę, która działa.
Myślałem o napisaniu usługi w języku C #, ale moje ograniczenia czasowe były zbyt napięte.
źródło
Zawsze używam tylko sc.exe (patrz http://support.microsoft.com/kb/251192 ). Powinien być zainstalowany na XP z SP1, a jeśli nie jest w twoim stylu Vista, możesz pobrać go załadować z zestawem zasobów Vista.
Nie zrobiłem nic zbyt skomplikowanego z Javą, ale użycie w pełni kwalifikowanego argumentu wiersza poleceń (x: \ java.exe ....) lub utworzenie skryptu z Antem w celu uwzględnienia zależności i ustawienia parametrów działa dla mnie dobrze.
źródło
Inną dobrą opcją jest FireDaemon . Jest używany przez niektóre duże sklepy, takie jak NASA, IBM itp .; zobacz ich stronę internetową, aby uzyskać pełną listę.
źródło
Obecnie wymagam tego do uruchomienia aplikacji opartej na środowisku Eclipse, ale najpierw muszę ustawić niektóre zmienne lokalne dla tej aplikacji. sc.exe zezwala tylko na pliki wykonywalne, ale nie na skrypty, więc zwróciłem się do autoexnt.exe, który jest częścią zestawu zasobów Windows 2003 . Ogranicza usługę do jednego pliku wsadowego, ale potrzebuję tylko jednego skryptu wsadowego, aby przekonwertować go na usługę.
cześć!
źródło
Exe4j to bardzo dobra opcja, choć nie jest darmowa. Sprawdź to na Exe4j W kreatorze, aby utworzyć plik .exe, masz opcję utworzenia usługi.
źródło