2013-08-29 16 views
11

Utworzyłem usługę Windows z Delphi dla aplikacji serwera klienta.Jak zainstalować usługę Windows z wiersza poleceń, podając nazwę i opis?

Aby zainstalować go używam

c:\Test\MyService.exe /install (or /uninstall) 

ten instaluje usługę w Windows Services to wymienia z nazwy „MojaUsluga” i pustym opisem.

Jak zdefiniować inną nazwę i wstawić opis (będzie widoczny po uruchomieniu services.msc)?

Uwaga: Potrzebuję tego, ponieważ na tej samej maszynie muszę zainstalować więcej razy tę samą usługę (1 na bazę danych).

Obecnie jedynym obejściem i foudn jest zmiana nazwy usługi exe, ale wolałbym znaleźć właściwą metodę wiersza poleceń, aby to zrobić (ponieważ robię to od ShellExecute).

Aktualizacja: Jakoś będę szukać czegoś podobnego (! To tylko ze względów wyjaśnienie oczywiście - InstallService.exe to nazwa Właśnie wymyślił):

InstallService.exe c:\Test\MyService.exe /install /name='MyService1' 
    /description='This is my service for database 1' 

ale też bardziej kompaktowa wersja będzie w porządku:

c:\Test\MyService.exe /install /name='MyService1' 
    /description='This is my service for database 1' 
+3

+1 Nie widzę powodu, dla którego pytanie to zasługiwało na przyzwolenie. –

+0

Zauważ, że Delphi 'TService' nie uruchamia usługi, gdy jest tworzone z inną nazwą niż własność' Name'. Zobacz [Usługa nie uruchamia się] (http://stackoverflow.com/q/18599201/859646), aby uzyskać opis problemu i obejście tego problemu. – JRL

+0

@Jerry - nie jest to złe pytanie, ale wydaje się być nie na temat. Perhpas, które wytłumaczą upadłość. Superużytkownik jest bardziej odpowiedni dla pytań "jak używać tego polecenia". – jww

Odpowiedz

13

Okna już są dostarczane z potrzebnym narzędziem, a mianowicie sc create.

 
>sc create /? 
DESCRIPTION: 
     Creates a service entry in the registry and Service Database. 
USAGE: 
     sc create [service name] [binPath= ] ... 

OPTIONS: 
NOTE: The option name includes the equal sign. 
     A space is required between the equal sign and the value. 
type= 
     (default = own) 
start= 
     (default = demand) 
error= 
     (default = normal) 
binPath= 
group= 
tag= 
depend= 
obj= 
     (default = LocalSystem) 
DisplayName= 
password= 

Spowoduje to utworzenie usługi i podanie nazwy oraz wyświetlanej nazwy.

Aby zmodyfikować opis trzeba sc description:

 
>sc description /? 
DESCRIPTION: 
     Sets the description string for a service. 
USAGE: 
     sc description [service name] [description] 

Innym oczywistym rozwiązaniem jest zbudowanie wiersza polecenia parsowania do swojej służby. To banalnie łatwe do zrobienia. Wystarczy przypisać obsługę zdarzeń serwisowych BeforeInstall i/lub AfterInstall i przetworzyć tamte przełączniki.

+0

Wielkie dzięki. Próbowałem wszystkich z wiersza poleceń i działa zgodnie z oczekiwaniami. Działa również z tymi samymi zdarzeniami (oczywiście eith diffrent [nazwa usługi].) – LaBracca

+2

ponadto 'sc usuń [nazwa usługi]' zamyka pętlę – LaBracca

+0

Tak, sc jest twoim facetem –