Service program

Top  Previous  Next

A szerviz alkalmazás egy olyan speciális program, mely már akkor elindul és fut amikor még egyetlen felhasználó sem jelentkezett be. Így elsősorban olyan alkalmazásokat célszerű ilyen módon elkészíteni, melyekre a számítógép működése folyamán állandóan szükség van. A készítés módja a következő:

A File - New menüpont után válasszuk a Service Application tételt.

 

A létrejövő alkalmazásnál Form helyett egy DataModule-ra hasonlító ablak jelenik meg.

Mivel a szerviz alkalmazás akkor is futhat, amikor nincs is bejelentkezve felhasználó, így nincs is szüksége induláshoz olyan ablakra, mely megjelenik a képernyőn.

 

A létrejött TService típusú ablaknál hozzunk létre az OnExecute eseményhez egy eseménykezelőt. Amikor az alkalmazásunk elindul, akkor ez az esemény lesz meghívva.

 

Amikor az OnExecute eseménykezelőben befejezzük a munkát, akkor véget ér az alkalmazásunk futása. Ha olyan szervizt készítünk, melynek mindaddig futnia kell, amíg a számítógép be van kapcsolva, akkor itt egy "végtelen" ciklust kell létrehoznunk. A végtelen kifejezés azonban nem teljesen igaz: kell hagynunk egy kijáratot arra az esetre, ha például a felhasználó újra szeretné indítani a gépet. Ezért a ciklus állandóan vizsgálja a Terminated property értékét. Ha ez igazzá válik, akkor be kell fejeznünk a programunk futását, vagyis véget kell vetni a ciklus működésének.

 

A cikluson belül természetesen tetszőleges műveleteket végezhetünk. Azonban ahhoz, hogy az alkalmazásunk képes legyen feldolgozni a Windows-tól érkező üzeneteket, rendszeresen meg kell hívnunk a ServiceThread objektum ProcessRequests eljárását.

 

Az elkészített alkalmazást nem nekünk kell futtatni, ezt majd a Windows teszi meg. Nekünk csak annyi a teendőnk, hogy installáljuk programunkat. Ezt a program elvégzi önállóan, csupán annyi a teendőnk, hogy elindítjuk egyszer az alkalmazást az /install paraméterrel. Pl.: Service1.exe /install

 

Ezek után, ha megnézzük a rendszerbe telepített szerviz alkalmazásokat (Control Panel - Services), akkor ott már a miénk is láthatóvá válik. Hogy milyen néven, azt a TService modul DisplayName property-nél megadott sztringben határozhatjuk meg.

 

Ha egy szervizt szeretnénk eltávolítani a rendszerből, akkor indítsuk el a programot az /uninstall paraméterrel.

 

Most azt vizsgáljuk, hogy az egyes szervizeknél milyen eseményeket kapunk és azok mikor jönnek létre. Minden egyes esemény létrejöttekor a szerviz alkalmazásunk annyit tesz, hogy kiírja egy napló állományba, hogy mikor is keletkezett az adott esemény.

 

Ezt az állományt a C:\ könyvtárba helyezi el log.txt néven. Ha itt nincs írási jogosultságunk, akkor módosítsuk a példaprogramot a Log nevű eljárásnál és írjuk át a könyvtárat valami másra.

 

A példaprogram kipróbálásához fordítsuk le, majd installáljuk, indítsuk el, állítsuk le és távolítsuk el a szervizek közül az /uninstall paranccsal. Ezek után nézzük meg, hogy mit tartalmaz a fenti log.txt, melyből egyértelműen kiderül, hogy az alábbi események mikor is jönnek létre.

 

Nézzük, milyen eseményeket találunk:

 

AfterInstall - jön létre, miután futtattuk a szerviz alkalmazást az /install paraméterrel.

 

AfterUninstall - jön létre, miután futtattuk a szerviz alkalmazást az /uninstall paraméterrel.

 

BeforeInstall - jön létre, mikor futtatjuk a szerviz alkalmazást az /install paraméterrel, de az még nem került végrehajtásra

 

BeforeUninstall - jön létre, mikor futtatjuk a szerviz alkalmazást az /uninstall paraméterrel, de az még nem került végrehajtásra

 

OnContinue - jön létre, mikor egy megállított szervizt újra próbálunk indítani. Itt a Countinued logikai típusú paraméternek hamis értéket adva meggátolhatjuk az újraindítást.

 

OnCreate - a szerviz modul létrejöttekor jön létre ez az esemény

 

OnDestroy - a szerviz modul megszűnésekor jön létre ez az esemény

 

OnPause - a szerviz megállításakor jön létre az esemény, ahol kapunk egy Paused változót, melyet hamisra állítva meggátolhatjuk a leállítást.

Fontos tudni, hogy a szervizt csak akkor állíthatjuk meg, ha az AllowPause property igaz.

 

OnShutdown - rendszer újraindításkor jön létre

 

OnStart - a szerviz indításakor jön létre. A Started paraméternek hamis értéket adva meggátolhatjuk a szerviz elindítását.

 

OnStop - a szerviz leállításakor jön létre. A Stopped paraméternek hamis értéket adva meggátolhatjuk a szerviz leállítását.

Fontos tudni, hogy a szervizt csak akkor állíthatjuk le, ha az AllowStop property igaz.

 

 

Hogy aktuálisan milyen állapotban van a szerviz alkalmazásunk azt a fenti események figyelésével követhetjük, de akár a Status property lekérdezésével is megtudhatjuk.