Windows - Szolgáltatások létrehozása, kezelése

A szolgáltatások speciális, általában a háttérben futó programok, melyek különleges bánásmódban részesülnek. Ilyenek például az "Eseménynapló" ("Event Viewer"), "DHCP-ügyfél" ("DHCP client"), stb. Általában köztük és a felhasználók között egy MMC konzol tartja a kapcsolatot (vagy még az sem). Cikkünkben megnézzük, hogy lehet egy új szolgáltatást regisztrálni a többi között, elindítani, leállítani, konfigurálni és tesszük mindezt parancssorból.
Hol találhatók a szolgáltatások
Tallózzunk el a Vezérlőpult > (Teljesítmény és karbantartás) > Felügyeleti eszközök > Szolgáltatások (Control Panel > (Performance and Manintenance) > Administrative Tools > Services) MMC konzolhoz. Itt látjuk a rendszerbe már regisztrált szolgáltatásokat, itt tudjuk elindítani, leállítani, tulajdonságaikat megtekinteni. Célunk, hogy az általunk készített programot is felvegyük ebbe a listába és ugyanolyan feltételeket teremtsünk neki, mint a már meglévőknek. Néhány fejlesztőkörnyezet (pl.: Delphi, C#) lehetővé teszi új szolgáltatások készítését és regisztrálását, de a teljes kezelést parancssorból is megvalósíthatjuk. Nem kell más hozzá, mint szolgáltatáskénti futtatásra alkalmas lefordított kód. Alábbi példáinkban erre a PROBA..EXE nevet használjuk.
Figyelem!!! Az alábbi parancsok csak akkor fognak lefutni, ha az előforduló összes egyenlőségjel után szóközt teszünk.
Új szolgáltatás regisztrálása
Ha már elkészült a kód első lépésben regisztrálni kell, hogy megjelenjen a többi szolgáltatás között. Ehhez minimálisan a következő parancsra van szükségünk:
sc create MyService binpath= c:\windows\system32\proba.exe
Ahol a "MyService" a konzolban is megjelenő név. A "binpath" pedig a regisztrálandó fájl neve, elérési úttal együtt.
A fenti utasítás a helyi gépen dolgozik, de az SC hálózatos funkciókkal is el van látva. Ha egy másik gépen akarjuk elvégezni a regisztrációt, adjuk meg az IP címét vagy a nevét UNC szintaxissal:
sc \\másikgépneve create MyService binpath= c:\windows\system32\proba.exe
Bővítsük tovább a lehetőségeket a típus meghatározásával:
sc create MyService binpath= c:\windows\system32\proba.exe type= own
Az alábbi típusok állnak rendelkezésünkre:
  • own = (alapértelmezett) A szolgáltatás nem osztja meg a végrehajtó fájlt más szolgáltatásokkal.
  • share = Megosztja a végrehajtó fájlt más szolgáltatásokkal.
  • kernel = Illesztőprogram.
  • filesys = Illesztőprogram a fájlrendszerhez.
  • interact = Interaktív kapcsolatot tart fent a felhasználóval. Csak az "own" vagy "share" típusokkal együtt használható.
Következik az indítás módjának meghatározása a "start" paraméter használatával.
sc create MyService binpath= c:\windows\system32\proba.exe type= own start= boot
Itt pedig a következők közül lehet választani:
  • boot = Rendszerindításkor indul.
  • system = Kernel inicializálás során indul.
  • auto = Rendszerindításkor töltődik be és akkor is fut, ha nincs senki bejelentkezve.
  • demand = (alapértelmezett) Kézzel kell indítani.
  • disabled = Nem lehet elindítani, ha mégis el akarjuk, meg kell változtatni a típust.
Ha az adott szolgáltatás indítása sikertelen volt egy hiba miatt - mindegy, hogy mi az - döntenünk kell, hogy a rendszer egésze szempontjából ez milyen súllyal bír. Ennek megfelelően reagál az operációs rendszer.
sc create MyService binpath= c:\windows\system32\proba.exe error= normal
Az "error" paraméter után kell megadni a hibakezelés módját, az alábbiak figyelembevételével:
  • normal = (alapértelmezett) Naplózás és egy figyelmeztető üzenet képernyőn való megjelenítése után folytatódik a Windows indítása.
  • severe = Naplózás után a gép utolsó helyes konfigurációjával történő újraindítása következik.
  • critical = Ugyanaz, mint az előző, de ha nem sikerül az újraindítás a gép hibaüzenettel leáll.
  • ignore = Csak naplózás történik, sem hibaüzenet, sem újraindítás, sem leállás nem lesz.
Minden szolgáltatás besorolható egy csoportba. A csoportneveket a regisztrációs adatbázisban lehet megtalálni az alábbi cím alatt:
HKLM\System\CurrentControlSet\Control\ServiceGroupOrder
Alapértelmezésben nem történik besorolás, ezért ha mégis ezt szeretnénk a "group" kapcsolót kell használnunk:
sc create MyService binpath= c:\windows\system32\proba.exe error= normal group= csoportnév
A függőségek listájában azok a szolgáltatások találhatók, melyeket az adott szolgáltatás előtt kell elindítani. Tehát működéséhez nélkülözhetetlen a másik szolgáltatás(ok) elindítása.
sc create MyService binpath= c:\windows\system32\proba.exe depend= másikszolgáltatás1/másikszolgáltatás2
Formabontóan a / jellel kell az elemeket elválasztani egymástól.
A már meghatározott függőségek listázásához használjuk az "unumdepend" kapcsolót:
sc enumdepend MyService
Regisztrált szolgáltatás törlése
Téves regisztráció vagy egyéb okok miatt egy már regisztrált szolgáltatást a "delete" kapcsolóval lehet törölni. Egyetlen paraméterként a törlendő nevét kell megadni.
sc delete MyService
Ugyanígy egy távoli gépen:
sc \\másikgép delete MyService
Előfordulhat, hogy nem lesz sikeres a törlés, mert éppen fut a szolgáltatás. Ekkor csak a regisztrációs adatbázisból törlődik a rámutató hivatkozás és a következő újraindítás alkalmával kerül ki a rendszerből.
Szolgáltatás elindítása / leállítása / felfüggesztése
Miután végrehajtottuk a sikeres regisztrációt, akár el is indíthatjuk. Nem kötelező, mert ha automatikus indítást választottunk, a következő rendszerindításkor megteszi helyettünk a Windows. A következő parancs egyfajta kézi indításnak fogható fel:
 sc start MyService
Ugyanígy a kézi leállítás is végrehajtható parancssorból:
sc stop MyService
A felfüggesztés pedig ily módon:
sc pause MyService
Meglévő beállítások módosítása
Az "Új szolgáltatás regisztrálása" fejezetben található összes kapcsoló használható a pillanatnyi beállítások megváltoztatására, azzal a különbséggel, hogy nem az "sc create", hanem az "sc config" parancsot kell használnunk. Nézzük például az indítás módjának megváltoztatását:
sc config MyService start= demand
Megjegyzés hozzáadása
A fenti MMC konzolban látjuk, hogy minden sorban található egy leírás (megjegyzés). Célja a könnyebb azonosítás. Folytatva a hagyományokat mi is lássuk el a szolgáltatásunkat egy rövid szöveggel.
sc description MyService "Windows Software Online példa"
További kapcsolók használatáról az sc /? kiadásával lehet tájékoztatást kapni.