HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Számítógép szervizeinek feltérképezése


Példaprogram letöltése

15864 bájt

Az NT struktúrára épülő számítógépeken kihasználhatjuk a Windows-os szervizek adta lehetőségeket. Sikerük egyik titka, hogy funkcionalitásuk a rendszerbe történő bejelentkezés nélkül is elérhető. Cikkünkben bemutatjuk a System.ServiceProcess névtér ServiceController osztályát, melynek segítségével kigyűjthetjük egy adott számítógépen futó valamennyi szerviz alkalmazás jellemzőit. A mellékelt példában bemutatjuk az osztály jellemző property-jeit, metódusait és ezek felhasználásának módját.

A példa használata előtt fordítsa le a kódot, és telepítse fel a Service projektben található Service.exe szerviz alkalmazást a következőképpen: installutil C:\...\Service.exe.
A példánk két projektet tartalmaz. A Service projektben elkészítettünk egy Windows-os szervizt, mely induláskor és leálláskor egy naplóállományba írja a két esemény bekövetkezésének időpontját.
A Controller projektben egy Windows-os alkalmazást készítünk el, melyből lekérdezzük a számítógépen futó szervizeket, nevüket megjelenítve a Form bal oldali listájában. A listából kiválasztva egy elemet, az adott szerviz egyéb tulajdonságai megjelennek a jobb oldali listában.
A művelet elvégzéséhez meg kell adni referenciaként a ServiceProcess névteret. Ehhez válasszuk a Project - Add reference menüpontot, majd a megjelenő ablakban a .NET lapon keressük elő a System.ServiceProcess elemet.
A műveletek elvégzéséhez a ServiceController osztály lehetőségeit vesszük igénybe. Az osztály segítségével kapcsolatot létesíthetünk egy adott szervizzel, elindíthatjuk, illetve leállíthatjuk azt, valamint lekérdezhetjük a szükséges információkat a szervizzel kapcsolatban.
Elsőként lássuk az osztály konstruktorát. A variációk közül a számunkra legmegfelelőbbet választottuk ki, melyet a példában is használtuk.
ServiceController
Osztály: ServiceController
public ServiceController(
string name
);
Létrehoz egy példányt az adott néven elérhető szerviz eléréséhez szükséges osztályból.
Paraméterek
string name
Az elérendő szerviz neve.
A legfontosabb property-k, melyeket lekérdezhetünk.
CanPauseAndContinue
Osztály: ServiceController
public bool CanPauseAndContinue {get;}
Logikai értékben lekérdezhető, hogy a szerviz működése szüneteltethető-e, illetve szünet után újraindítható-e.
CanShutdown
Osztály: ServiceController
public bool CanShutdown {get;}
Logikai értékben lekérdezhető, hogy a szervizen elvégezhető-e a SHUT DOWN művelet.
CanStop
Osztály: ServiceController
public bool CanStop {get;}
Logikai értékben lekérdezhető, hogy a szerviz megállítható-e elindítás után.
CanStart
Osztály: ServiceController
public bool CanStart {get;}
Logikai értékben lekérdezhető, hogy a szerviz elindítható-e megállítás után.
DependentServices
Osztály: ServiceController
public ServiceController[] DependentServices {get;}
Lekérdezhetők azok a szervizek, melyek működése az adott szerviztől függ.
DisplayName
Osztály: ServiceController
public string DisplayName {get; set;}
Lekérdezhető a Szerviz Explorer-ben megjelenő név.
ServiceName
Osztály: ServiceController
public string ServiceName {get; set;}
Lekérdezhető a szerviz neve.
MachineName
Osztály: ServiceController
public string MachineName {get; set;}
Lekérdezhető a számítógép neve.
ServicesDependedOn
Osztály: ServiceController
public ServiceController[] ServicesDependedOn {get;}
Lekérdezhetők azok a szervizek, melyek működésére támaszkodik az adott szerviz.
ServiceType
Osztály: ServiceController
public ServiceType ServiceType {get;}
Lekérdezhető a szerviz típusa. Lehetséges értékei a ServiceType felsorolt típus elemei, melyek közül a Win32OwnProcess érték utal arra, hogy egy, a Windows saját process-listájába tartozó folyamatról van szó.
Status
Osztály: ServiceController
public ServiceControllerStatus Status {get;}
Lekérdezhető a szerviz státusza. Lehetséges értékei a ServiceControllerStatus felsorolt típus elemei. Ezek a követezők:
Értékek Magyarázat
Running A szerviz fut.
Stopped A szerviz leállított állapotban van.
Paused A szerviz futása szünetel.
StartPending Indulás folyamatban.
StopPending Leállás folyamatban.
PausePending Szüneteltetés folyamatban.
Most vizsgáljuk meg a metódusokat.
Close
Osztály: ServiceController
public void Close();
A kapcsolat megszakítása a szervizzel.
GetServices
Osztály: ServiceController
public static ServiceController[] GetServices();
Lekérdezhető a számítógépen futó valamennyi szerviz neve.
Visszatérési érték
Egy tömb, mely a szervizek nevét tartalmazza.
Pause
Osztály: ServiceController
public void Pause();
A szerviz futásának felfüggesztése. A folytatás a Continue metódussal lehetséges.
Stop
Osztály: ServiceController
public void Stop();
A szerviz megállítása.
Start
Osztály: ServiceController
public void Start();
A szerviz indítása.
WaitForStatus
Osztály: ServiceController
public void WaitForStatus(
ServiceControllerStatus desiredStatus,
TimeSpan timeout
);
Várakoztatja a processt, amíg a paraméterben megadott állapot bekövetkezik, vagy a megadott időkorlát eltelik.
Paraméterek
ServiceControllerStatus desiredStatus
A várt állapot azonosítója, mely a ServiceControllerStatus felsorolt típus elemei közül egy.
TimeSpan timeout
A várakozás TIMEOUT-ja.
Lássuk, hogyan is néz ez ki a gyakorlatban. A szerviz alkalmazás a _Sample DisplayName property-vel rendelkezik, valamint a LogService nevet viseli. A szerviz a naplóállományt induláskor és leálláskor a rendszermeghajtó gyökerében hozza létre.
A Controller alkalmazás indításakor lekérdezzük a szervizeket a ServiceController osztály segítségével.
ServiceController[] services;
services = ServiceController.GetServices();
Majd megjelenítjük a neveket a listában.
for (int i = 0; i <  services.Length; i++)
{
  this.listBox1.Items.Add(services[i].DisplayName);
}
A lista egy elemére kattintva a másik listában jelennek meg a szervizre jellemző tulajdonságok. A Form egyetlen gombjával meghívjuk a szerviz Start, illetve Stop metódusát, attól függően, hogy az éppen áll, vagy el van indítva. Erről természetesen a Status property-vel győződhetünk meg.
Amennyiben a szerviz eltávolítására van szükségünk, a következő sort kell beírnunk a parancssorba:
installutil /u <szerviz elérési útvonala>

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 312. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |