2009-07-21 17 views
7

I wdrożyli moją usługę Windows (za pomocą niezależnie instalatora klasy i Sc.exe), ale pojawia się błąd, gdy próbuję go uruchomić:Jaki jest limit czasu na uruchomienie usługi Windows?

--------------------------- 
Services 
--------------------------- 
Could not start the MyName service on Local Computer. 



Error 1053: The service did not respond to the start or control request in a timely fashion. 

Jaki jest limit czasu? Czuł się jak około 3 sekund. Co muszę zrobić, jeśli moja usługa trwa dłużej?

Odpowiedz

14

W swojej klasie usług, użyj ServiceBase.RequestAdditionalTime() w onStart/metody OnStop:

// request an additional 4 seconds to complete the operation 
RequestAdditionalTime(4000); 
+1

Jest to bardzo przydatne. Dzięki. – Jirapong

11

Normalny sposób tworzenia usługi polega na tym, aby kod startowy utworzył nowy wątek i uruchom usługę w tym wątku.

Uruchomienie usługi powinno być prawie natychmiastowe - nic więcej niż utworzenie nowego wątku z "prawdziwą" pracą.

Jeśli zajmujesz więcej niż trzy sekundy, jest to znak, że wykonujesz prawdziwą pracę w głównym wątku i nie tworzysz osobnego dla swojej usługi.

+2

Zakłada słabą konstrukcję, gdzie nie może być obecny. Złożona inicjalizacja może zająć więcej czasu, a komunikat "nie udało się odpowiedzieć" informuje użytkowników o niepowodzeniu uruchomienia. Jeśli błąd wystąpi w wątku, a usługa zostanie przerwana, jedynym widocznym dowodem (bez oddzielnego interfejsu monitorowania) będzie dziennik zdarzeń. –

+0

dlaczego? ! – zvolkov

+3

Istnieje powód, dla którego istnieje 3-sekundowy limit czasu uruchamiania. Istnieją sposoby na przedłużenie tego czasu (RequestAdditionalTime()), ale zaleca się, aby usługi szybko się uruchamiały i/lub popchnęły pracę do osobnego wątku i alarmowały w inny sposób. Dłuższy czas na uruchomienie uniemożliwi szybkie uruchomienie innych usług, co jest złym projektem, IMO. –

2

W odniesieniu do konkretnej kwestii, dokładny czas oczekiwania jest różny, ale jest mniej niż 30 sekund. Możesz kontrolować domyślny limit czasu uruchamiania dla usługi za pomocą klucza rejestru, możesz zobaczyć, jak to zrobić here.

Jednak zgadzam się z wieloma innymi, że przyjrzę się dwóm możliwym opcjom.

  1. Get usługa rozpoczęła ASAP, tarła wątku, itp ..
  2. Jeśli nie można przejść z jednej opcji, można użyć RequestAdditionalTime(). Tylko pamiętaj, aby wykonać to połączenie wcześnie.
1

Również, jeśli przetestowałeś usługę w różnych środowiskach fizycznych i wydaje się, że problem nie jest normalnym czasem uruchamiania, ale wydajnością komputerów. Można zwiększyć limit czasu na kluczu rejestru dla określonego komputera.

proszę zobaczyć: http://support.microsoft.com/kb/839803

Pozdrowienia

Powiązane problemy