Czy istnieje jakiś szybki sposób, aby, biorąc pod uwagę plik wykonywalny, utworzyć usługę systemu Windows, która po uruchomieniu uruchamia ją?
windows
windows-services
Niemiecki Latorre
źródło
źródło
Odpowiedzi:
Aby utworzyć usługę Windows z pliku wykonywalnego, możesz użyć
sc.exe
:Musisz mieć cudzysłowy wokół rzeczywistej
exe
ścieżki i spację pobinPath=
.Więcej informacji na temat
sc
polecenia można znaleźć w Microsoft KB251192 .Zauważ, że to nie będzie działać tylko dla dowolnego pliku wykonywalnego: plik wykonywalny musi być usługą Windows ( tj. Implementować ServiceMain ). Podczas rejestrowania pliku wykonywalnego innego niż usługa jako usługa, podczas próby uruchomienia usługi pojawi się następujący błąd:
Istnieją narzędzia, które mogą utworzyć usługę systemu Windows na podstawie dowolnych plików wykonywalnych innych niż usługi. Przykłady takich narzędzi można znaleźć w innych odpowiedziach.
źródło
binpath=
tym, jak trzeba otaczać wykonywalną ścieżkę podwójnymi cudzysłowami, jest całkowicie błędna, przynajmniej dla Windows 10. cytowanie jest wymagane tylko wtedy, gdy ścieżka zawiera znaki specjalne, takie jak białe znaki. także obudowa (lowe / upper / mixed-case) nie ma znaczenia nigdzie, również w nazwach zmiennych, idisplayname="my service"
jest kolejnym gadżetem do przekazania w wierszu poleceń podczas tworzenia usługi, która ma być wyświetlana jako pierwszy wiersz (Name
) wservices.msc
.binPath=
Użyj NSSM ( Menedżera usług bez ssania ), aby uruchomić .BAT lub dowolny plik .EXE jako usługę.
http://nssm.cc/
nssm.exe install [serviceName]
źródło
Rozszerzenie odpowiedzi (Kevin Tong).
Krok 1: Pobierz i rozpakuj plik nssm-2.24.zip
Krok 2: Z typu wiersza poleceń:
C:\> nssm.exe install [servicename]
otworzy GUI jak poniżej (przykład to serwer UT2003), a następnie po prostu przejrzysz go do: yourapplication.exe
Więcej informacji na: https://nssm.cc/usage
źródło
nssm.exe install [serviceName]
. To rozwiązanie działa, ale jeśli masz aplikację GUI, nie będzie działać na Win Serever2003. Jeśli chcesz go później usunąć, użyjnssm.exe remove [youservicename]
nginx
nie jest konieczne i wprowadza w błąd. Polecenie będzie również działać bez niego. Jest to parametr opcjonalny, jeśli chcesz podać nazwę usługi z wiersza polecenia.Wiele istniejących odpowiedzi obejmuje interwencję człowieka w czasie instalacji. Może to być proces podatny na błędy. Jeśli masz wiele plików wykonywalnych, które chcesz zainstalować jako usługi, ostatnią rzeczą, którą chcesz zrobić, to zrobić je ręcznie podczas instalacji.
W ramach wyżej opisanego scenariusza stworzyłem serman , narzędzie wiersza polecenia do zainstalowania pliku wykonywalnego jako usługi. Wszystko, co musisz napisać (i napisać tylko raz), to prosty plik konfiguracyjny usługi wraz z plikiem wykonywalnym. Biegać
zainstaluje usługę.
stdout
istderr
wszyscy są zalogowani. Aby uzyskać więcej informacji, zajrzyj na stronę projektu .Działający plik konfiguracyjny jest bardzo prosty, jak pokazano poniżej. Ale ma również wiele przydatnych funkcji, takich jak
<env>
i<persistent_env>
poniżej.źródło
te dodatki okazują się przydatne .. należy je wykonać jako administrator
Jeśli w nazwie usługi znajdują się spacje, należy ująć je w „cudzysłowy”.
źródło
sc create <service_name> binpath= <binary_path>
Testowałem do tego dobry produkt: AlwaysUp . Nie za darmo, ale mają 30-dniowy okres próbny, więc możesz spróbować ...
źródło