Spuštění služby
K spuštění služby nebo služby ovladače používá řídicí program služby funkci StartService. Funkce StartService selže, pokud je databáze uzamčená. Pokud k tomu dojde, program řízení služeb by měl několik sekund počkat a volat StartService znovu. Může zkontrolovat aktuální stav zámku databáze zavoláním funkce QueryServiceLockStatus.
Pokud řídicí program služby spouští službu, může použít funkci StartService k určení pole argumentů, které se mají předat ServiceMain funkce služby. Funkce StartService vrátí po vytvoření nového vlákna, aby se spustila funkce ServiceMain. Program řízení služeb může načíst stav nově spuštěné služby ve struktuře SERVICE_STATUS voláním funkce QueryServiceStatus. Během inicializace by měl být SERVICE_START_PENDING člen dwCurrentState. Člen dwWaitHint je časový interval v milisekundách, který udává, jak dlouho má program řízení služby čekat, než znovu zavolá QueryServiceStatus. Po dokončení inicializace se služba změní dwCurrentState na SERVICE_RUNNING.
Správce řízení služeb nepodporuje předávání vlastních proměnných prostředí službě při spuštění. Správce řízení služeb také nezjistí a nepředá změny proměnným prostředí při spuštění služby. Místo toho, aby služba byla závislá na proměnné prostředí, použijte hodnoty registru nebo ServiceMain argumenty.
Následuje zjednodušený přehled toho, co se stane, když správce řízení služeb spustí typickou službu:
- SCM načte cestu služby z registru a připraví ji ke spuštění. To zahrnuje získání zámku služby. Všechny pokusy o spuštění jiné služby v době, kdy se zámek služby uchovává, zablokuje, dokud se zámek služby nevolí.
- SCM spustí proces a počká, až se podřízený proces ukončí (značí selhání) nebo nahlásí stav SERVICE_RUNNING.
- Aplikace provádí velmi jednoduchou inicializaci a volá funkci StartServiceCtrlDispatcher.
- StartServiceCtrlDispatcher se připojí ke správci řízení služeb a spustí druhé vlákno, které volá funkci ServiceMain pro službu. ServiceMain by měla co nejdříve hlásit SERVICE_RUNNING.
- Když správce řízení služeb oznámí, že je služba spuštěná, uvolní zámek služby.
Pokud služba neaktualizuje svůj stav během 80 sekund plus poslední tip čekání, správce řízení služeb zjistí, že služba přestala reagovat. Správce řízení služeb zapíše událost a zastaví službu.
Pokud program spouští službu ovladačů, StartService vrátí po dokončení inicializace ovladače zařízení.
Další informace najdete v tématu Spuštění služby.