Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Usługi są zwykle zapisywane jako aplikacje konsolowe. Punktem wejścia aplikacji konsolowej jest jej główna funkcja. Główna funkcja odbiera argumenty z wartości ImagePath z klucza rejestru dla usługi. Aby uzyskać więcej informacji, zobacz sekcję Uwagi funkcji CreateService.
Gdy program SCM uruchamia program usługi, czeka na wywołanie funkcji StartServiceCtrlDispatcher. Skorzystaj z poniższych wskazówek.
- Usługa typu SERVICE_WIN32_OWN_PROCESS powinna natychmiast wywołać StartServiceCtrlDispatcher z głównego wątku. Można wykonać dowolną inicjację po uruchomieniu usługi zgodnie z opisem w ServiceMain Function.
- Jeśli typ usługi jest SERVICE_WIN32_SHARE_PROCESS i istnieje powszechna inicjalizacja wszystkich usług w programie, można wykonać inicjowanie w wątku głównym przed wywołaniem StartServiceCtrlDispatcher, o ile trwa to mniej niż 30 sekund. W przeciwnym razie należy utworzyć inny wątek, aby wykonać wspólną inicjację, podczas gdy główny wątek wywołuje StartServiceCtrlDispatcher. Po uruchomieniu usługi nadal należy wykonać dowolną inicjację specyficzną dla usługi.
Funkcja StartServiceCtrlDispatcher przyjmuje strukturę SERVICE_TABLE_ENTRY dla każdej usługi zawartej w procesie. Każda struktura określa nazwę usługi i punkt wejścia dla usługi. Aby zapoznać się z przykładem, zobacz Pisanie głównej funkcji programu usługi.
Jeśli startServiceCtrlDispatcher zakończy się powodzeniem, wątek wywołujący nie zostanie zwrócony, dopóki wszystkie uruchomione usługi w procesie nie wejdą w stan SERVICE_STOPPED. Program SCM wysyła żądania sterowania do tego wątku za pośrednictwem nazwanego potoku. Wątek działa jako dyspozytor kontrolny, wykonując następujące zadania:
- Utwórz nowy wątek, aby wywołać odpowiedni punkt wejścia po uruchomieniu nowej usługi.
- Wywołaj odpowiednią funkcję obsługi w celu obsługi żądań kontroli usługi.
Tematy pokrewne