Mam usługę Windows, którą instaluję przy użyciu programu InstallUtil.exe. Mimo że ustawiłem metodę uruchamiania na Automatyczną, usługa nie uruchamia się po zainstalowaniu, muszę ręcznie otworzyć usługi i kliknąć przycisk Start. Czy istnieje sposób, aby go uruchomić za pomocą wiersza poleceń lub kodu usługi?
c#
windows-services
mickyjtwin
źródło
źródło
ServiceController
w instrukcję using.ServiceInstaller
zmienną w Twojej klasie. Taka klasa będzie realizowaćSystem.Configuration.Install.Installer
. Więcej informacji znajdziesz w tym przewodniku po msdn .serviceInstaller
jest toServiceInstaller
obiekt, do którego odwołuje sięsender
program obsługi zdarzeń, którego instancja jest zwykle tworzona wServiceInstaller()
konstruktorze. Dlatego możesz dodaćServiceInstaller serviceInstaller = (ServiceInstaller)sender;
przedusing
stwierdzeniem.Po krótkiej refaktoryzacji, oto przykład kompletnego instalatora usługi Windows z automatycznym startem:
źródło
A co z wykonywaniem poleceń?
źródło
Programowe opcje kontrolowania usług:
StartService
metodę. Jest to dobre w przypadkach, w których musisz mieć możliwość wykonania innego przetwarzania (np. W celu wybrania usługi).Start-Service
przezRunspaceInvoke
lub tworząc własneRunspace
i używając jegoCreatePipeline
metody do wykonania. Jest to dobre w przypadkach, w których musisz mieć możliwość wykonania innego przetwarzania (np. Aby wybrać usługę) z dużo łatwiejszym modelem kodowania niż WMI, ale zależy to od zainstalowanego PSH.ServiceController
źródło
Aby uruchomić usługę, możesz użyć następującego wiersza poleceń:
źródło
Użyj ServiceController, aby uruchomić usługę z kodu.
Aktualizacja: I bardziej poprawnym sposobem uruchamiania usługi z wiersza poleceń jest użycie polecenia „sc” ( Kontroler usług ) zamiast „net”.
źródło
Mimo że dokładnie zastosowałem się do zaakceptowanej odpowiedzi, nadal nie byłem w stanie uruchomić usługi - zamiast tego otrzymałem komunikat o błędzie podczas instalacji z informacją, że usługa, która została właśnie zainstalowana, nie może zostać uruchomiona, ponieważ nie istniała, pomimo użycia
this.serviceInstaller.ServiceName
raczej niż dosłowne ...W końcu znalazłem alternatywne rozwiązanie, które wykorzystuje wiersz poleceń:
źródło
Automatyczne uruchamianie oznacza, że usługa jest uruchamiana automatycznie podczas uruchamiania systemu Windows. Jak wspominali inni, aby uruchomić go z konsoli, należy użyć ServiceController.
źródło
Możesz użyć
GetServices
metody klasy ServiceController, aby uzyskać tablicę wszystkich usług. Następnie znajdź swoją usługę, sprawdzającServiceName
właściwość każdej usługi. Po znalezieniu usługi wywołajStart
metodę, aby ją uruchomić.Powinieneś również sprawdzić
Status
właściwość, aby zobaczyć, w jakim stanie jest już przed wywołaniem startu (może być uruchomiona, wstrzymana, zatrzymana itp.).źródło
Zepsułeś swojego projektanta. Ponownie dodaj składnik instalatora. Powinien mieć serviceInstaller i serviceProcessInstaller. ServiceInstaller z właściwością Startup Method ustawioną na Automatic będzie uruchamiana po zainstalowaniu i po każdym ponownym uruchomieniu.
źródło
Uwaga: usługa mogła zostać skonfigurowana inaczej przy użyciu interfejsu formularzy w celu dodania instalatora usługi i instalatora projektu. W takim przypadku zamień miejsce, w którym jest napisane serviceInstaller.ServiceName, na „nazwa od projektanta” .ServiceName.
W tym przypadku nie potrzebujesz również prywatnych członków.
Dzięki za pomoc.
źródło