Jak uruchomić usługę z określonymi parametrami początkowymi w systemie Windows

18

Jak uruchomić usługę z określonymi parametrami? W innym pytaniu znalazłem

nazwa uruchomienia netto nazwa usługi bla

ale jeśli spróbuję, netrzuca we mnie błąd składniowy.

Co ja robię źle?

Edycja: wyjaśnienienet start servicenamedziała dobrze, ale muszę przekazać parametry do usługi. Mogę to zrobić ręcznieservices.msc, wypełniając parametr start przed uruchomieniem usługi. Ale jak mogę to zrobić ze skryptu?

Kolejna edycja: Przepraszam, ale moje pytanie było mylące . W moich testach miałem znacznie więcej parametrów i na to nie/blah net startnarzekam. W rzeczywistości wszystko , co zaczyna się od ukośnika, jest w porządku . Więcnet start servicename /blahdziała,net start servicename blahnie działa. Ponieważ potrzebujęnet start servicename /foo bar, tobarjest problem.

sbi
źródło

Odpowiedzi:

29
sc start fooservice arg1 arg2 ...
użytkownik1686
źródło
Nie mam pojęcia, jak udało mi się przeoczyć twoją odpowiedź, ale z pewnością bardzo się cieszę, że znalazłem ją teraz (przez przypadek). Działa to jak urok - nawet w przypadku parametrów, które nie zaczynają się od /. Wielkie dzięki!
sbi
Jest rok 2018 i ani „sc start ...”, ani „net start ...” nie działają w systemie Windows 10. Edycja rejestru działa na
serwerze
8

NET STARTnie zezwalam na przekazywanie dowolnych parametrów, o ile mi wiadomo (wydaje się, że muszą one być poprzedzone znakiem /), uważam, że poprawnym sposobem jest zmodyfikowanie odpowiedniego klucza rejestru i zatrzymanie / uruchomienie usługi. Zakładając, że Twoja usługa niestandardowa nazywa się MyService:

[HKLM\SYSTEM\CurrentControlSet\Services\MyService]
"ImagePath":C:\Projects\MyService\bin\MyService.exe Parameter1 Parameter2

Naprawdę jednak lepszym sposobem jest przechowywanie konfiguracji w miejscu znanym przez usługę, na przykład w rejestrze lub systemie plików, i odczytywanie potrzebnych wartości. Jak widać, dostosowanie wiersza poleceń jest nieco bardziej bolesne niż powinno.

Jeśli jest to przypadkiem usługa opracowana w technologii .NET, możesz utworzyć n kopii pliku wykonywalnego w systemie plików i każda z nich automatycznie pobierze parametry z odpowiedniego pliku app.config.

Wygląda na to, że przekroczyłeś granicę Win32. Ponieważ brzmi to jak tworzenie niestandardowe, każde inne oferowane rozwiązanie, choć być może nie jest idealne, będzie działać poprawnie i jest bezpieczniejszą drogą.

Goyuix
źródło
Ugh. Usługa pobiera plik konfiguracyjny. Używa albo domyślnej nazwy pliku, albo jednej przekazanej do niego. Ponieważ potrzebuję dwóch różnych instancji działającej usługi, muszę skierować je na różne pliki konfiguracyjne. Konieczność majstrowania przy rejestrze wydaje się bardzo brzydkim hackowaniem. Czy naprawdę nie ma innego wyjścia niż to (i GUI)?
sbi
Goyuix, zobacz moje zredagowane pytanie. net start nie akceptować parametry, ale tylko te, zaczynając z /.
sbi
Goyuix, teraz używam sc.exe. Zobacz odpowiedź grawitacji (której wtedy jakoś udało mi się przeoczyć).
sbi
4

Przed użyciem każdego parametru potrzebujesz ukośnika net start. Należy również podać parametry, które mają spacje.

net start servicename /param0 /"param1 with spaces" /"/param2_has_slash"
Nawet Mien
źródło
Spójrz jeszcze raz na mój problem. Mam parametry, które (muszę) zacząć od ukośnika. Jak miałbym wtedy je przekazać?
sbi
Spróbuj tego: net start nazwa_usługi / "/ foo" / bar
Nawet Mien
3

net start servicename /foo za jeden argument

net start servicename /"foo bar" dla ciągu lub listy argumentów

Uwaga : to pytanie ma 8 lat, ale nie mam reputacji, aby komentować zaakceptowaną odpowiedź, a to nadal jest najlepszy wynik Google w 2018 roku, więc chciałem wyjaśnić, co teraz działa w odniesieniu do ostatecznej edycji pytań.

MissingL_tter
źródło
Uwaga: Dałem ci głos pozytywny, więc teraz twoja odpowiedź jest na czwartej pozycji, a ty masz trochę powtórzeń. Miłej zabawy tutaj! :-)
sbi,
1

Musisz użyć rzeczywistej nazwy usługi wyświetlanej w panelu sterowania, usługi. Jeśli zawiera spacje, musisz umieścić cudzysłowy wokół nazwy usługi.

Aby uzyskać rzeczywistą nazwę usługi, wystarczy wpisać net startbez parametrów w wierszu polecenia. Powinien dać ci listę wszystkich uruchomionych usług, abyś mógł uzyskać rzeczywistą nazwę usługi. Więc po prostu użyjnet start <servicename>

Robert Williams
źródło
Robert, to moja usługa, którą instaluję, a następnie uruchamiam w skrypcie. Mam się net start "my-service-name"dobrze. To net start "my-service-name" /blahdaje mi komunikat o błędzie. Próbowałem również net start "my-service-name" -blahi to też jest błąd składniowy.
sbi
0

Czy InstSrv i SrvAny mogą w tym pomóc? Przewodnik i linki

Dave M.
źródło
Patrzyłem na to krótko i nie sądzę. (Proszę, popraw mnie, jeśli się mylę.) Mam plik wykonywalny usługi działający poprawnie. Po prostu (do testów) muszę zainstalować i uruchomić go ze skryptu i muszę przekazać parametry do usługi.
sbi