Crearea de servicii Windows C # (servicii)
Servicii Windows (servicii Windows NT) - procese care au o interfață unificată pentru a interacționa cu sistemele de operare Windows NT. Serviciile sunt împărțite în două tipuri - servicii Win32, care interacționează cu sistemul de operare prin Service Control Manager (SCM) și drivere care operează utilizând protocolul driver device (denumit în continuare servicii Win32). Serviciile rulează în fundal, iar munca lor este ascunsă de utilizator. Din acest motiv, acestea sunt ideale pentru implementarea proceselor de server în arhitectura client-server, serviciile de rețea, programele de monitorizare și programele executate sporadic.
Pentru a crea un serviciu în VS.NET, trebuie:
Creați o soluție de serviciu de proiect folosind șablonul special pentru Visual C # Projects - Windoes Service.
Scrieți codul funcției și codul evenimentului OnStart și OnStop.
Creați instalatori pentru acest serviciu (ProjectInstaller - pentru instalarea procesului și ServiceInstaller pentru serviciul de proiect sau servicii).
Creați un fișier executabil.
Creați un proiect de instalare.
Instalați și activați serviciul.
În meniul File VS .NET, selectați New și Project. În caseta de dialog New Project Tipuri de proiect, selectați Visual C # Proiecte, Template - servicii Windows, cere numele, de exemplu, MyFirstServicee, Locație - specifică directorul în cazul în care proiectul va genera.
Fișierul AssemblyInfo.cs "sa mutat" în folderul Properties.
Fig.1. Crearea unei soluții de serviciu de proiect
În această etapă, suntem interesați de un fișier numit Service1.cs. Serviciu - numele clasei de proiect, succesorul clasei System.ServiceProcess.ServiceBase.
utilizând Sistemul;
folosind System.Collections.Generic;
utilizând System.ComponentModel;
utilizând System.Data;
folosind System.Diagnostics;
utilizând System.ServiceProcess;
folosind System.Text;
spațiul de nume MyFirstService
public class1. ServiceBase
.
Clasa conține constructorul de clasă, funcția principală și funcțiile metodelor OnStart și OnStop. Metodele OnPause () și OnContinue () pot fi, de asemenea, incluse în proiect (codul lor poate fi adăugat manual, dar metodele nu sunt obligatorii).
// Constructor de clase
serviciul public1 ()
InitializeComponent ();
>
static void Principalul ()
>
protejarea suprascriirii void OnStart (string [] args)
// Cod executat la începutul procesului
>
protejat override void OnStop (șir [] args)
// cod executat când procesul este oprit
>
În meniul contextual al formularului de designer (fila Project Service1.cs [design], faceți clic dreapta), selectați Properties articol a (dacă fila nu este vizibil - dublu-clic pe mouse-ul pe numele fișierului în Servece1.cs Solutation Explorer). Setați proprietățile (Fig.2):
- Numele serviciului (numele proiectului) - MyFirstService,
- AutoLog - Adevărat.
Fig.2. Setarea proprietăților serviciului
Aici puteți modifica numele afișat al serviciului (proprietatea ServiceName).
Pe acest proiect este creată soluția de serviciu.
Scrierea unui cod al funcției de serviciu
Pentru a ne asigura că serviciul nostru funcționează, îi vom atribui sarcina de a scrie unele informații la un fișier de jurnal la pornire și oprire. Pentru a face acest lucru:
Să adăugăm un spațiu de nume:
utilizând System.IO;
Declarăm în clasa Service1 StreamWriter:
fișier privat StreamWriter;
Codurile pentru persoanele care manipulează evenimente sunt scrise după cum urmează:
protejarea suprascriirii void OnStart (string [] args)
// Fișierul implicit va fi creat în "C: # 92; Winnt # 92; System32 # 92;"
fișier = nou StreamWriter (nou FileStream ("MyFirstService.log",
System.IO.FileMode.Append));
this.file.WriteLine ("MyFirstService a început");
this.file.Flush ();
>
protejat override void OnStop ()
this.file.WriteLine ("MyFirstService este oprit");
this.file.Flush ();
this.file.Close ();
>
Mai târziu vom adăuga o nouă funcționalitate serviciului nostru.
În fila Service1.cs [Design], sunăm din nou meniul contextual și elementul Add Instaler. O clasă de componente care conține doi instalatori este adăugată la proiect:
- ProjectInstaller - pentru a instala serviciul și
- ServiceInstaller - pentru a seta procesul asociat serviciului.
Pentru ServiceInstaller1 afișăm proprietățile sale (meniul contextual Properties) și setăm:
- ServiceName - MyFirstService,
- ServerType - Automat.
Pentru ServiceProcessInstaller1, setați valoarea Contului în LocalSystem (Fig.3).
Crearea unui executabil pentru serviciu
În Solution Explorer, selectați Proprietăți pentru nodul MyFirstServices. În caseta de dialog, selectați fila Aplicație. Pentru obiectul Startup, selectați lista derulantă MyFirstService.Programm (Fig.4).
Figura 4. Setarea proprietăților pentru programul de instalare
În meniul contextual al nodului MyFirstServices, selectați Build. După aceea, proiectul este construit în directorul de proiect, care va fi generat în fișierul obj # 92; debug sau obj # 92; eliberarea fișierului MyFirstService.exe. Cu toate acestea, încercarea de pornire va avea ca rezultat un mesaj (figura 5):
Figura 5. Trebuie să instalați serviciul
Creați un proiect de instalare pentru serviciu
În meniul Fișier, faceți clic pe Adăugați proiect și Proiect nou. În caseta de dialog Adăugați un proiect din fereastra Tipuri de proiect, selectați fila Alte tipuri de proiecte din figura de instalare și implementare, în fereastra Șabloane - configurare proiect, setați Numele și locația - ambii parametri nu sunt importanți (Fig.6).
Figura 6. Adăugarea unui proiect de soluție de instalare a serviciului
Proiectul de instalare este adăugat la soluție și îl vedem în Solutation Explorer.
În plus, în fila File System (FirstServices) putem vedea ansamblul de fișiere pentru instalarea "File System on Target Machine" (Fig.7).
Figura 7. Crearea unui proiect de soluție de instalare a serviciului
Următorul lucru pe care trebuie să-l faceți este să definiți un director pentru instalarea serviciului Windows.
Selectați sistemul nod de fișiere pe țintă mașină (dacă pentru orice motiv, noi nu vedem copacul de dosare, îl puteți afișa prin intermediul context nodul FirstServices meniu, faceți clic pe Vizualizare Ia / File System), în meniul contextual, selectați Adăugați un dosar special, și System Folder. Numele sistemului Folder a apărut în ramura sistemului de fișiere de pe nodul țintă al mașinii.
În meniul contextual al folderului sistem, selectați Adăugare, Proiect de ieșire # 92; Ieșire primară (Fig.8).
Figura 8. Definiți directorul serviciului
Selectați elementul Vizualizare pentru nodul FirstServices al elementului Action Custom și patru acțiuni implicite pentru instalator vor apărea în partea stângă a ferestrei: Install, Commit, Rollback și Uninstall. Pentru instalare și dezinstalare, faceți clic pe meniul contextual din meniul Adăugați acțiunea personalizată și specificați folderul de sistem (Figura 9).
Figura 9. Determinarea acțiunilor instalatorului
În practică, am determinat nu numai acțiunea, ci și obiectul acestei acțiuni - ieșirea primară de la MyFirstService (activă). În aceste noduri de acțiuni ale utilizatorului (Install and Uninstall), va fi adăugat fișierul principal de ieșire al proiectului. În proprietățile pe care le puteți schimba pentru fișierul CustomInstaller, valoarea adevărată indică instalatorului că este folosit clasa de instalare (Fig.10).
Figura 10. Determinarea acțiunilor instalatorului
Acum puteți construi un proiect de instalare prin apelarea Build pentru nodul FirstServices în Soluta Explorer.
Pentru a instala serviciul în Solutation Explorer, selectați proiectul de instalare (FirstServices) și faceți clic pe Install din meniul contextual. Ca urmare, va fi lansat Expertul de configurare. În al doilea pas al lucrării, am setat folderul de sistem Windows - C: # 92; WINDOWS # 92; system32 # 92; După terminarea Expertului de configurare, serviciul va fi instalat.
Pentru a porni și a opri serviciul, deschideți Managerul de control al serviciului (în Windows XP - Start / Program / Instrumente administrative / Servicii). Numele MyFirstService nostru de serviciu va apărea în fereastra Services, și în modul obișnuit de a începe serviciul nostru prin elementul de meniu contextual de pornire (în plus, serviciul va porni automat atunci când computerul este supraîncărcată).
Serviciul nostru a creat fișierul Service1.log în "C: # 92; windows # 92; System32 # 92;" și a executat o înregistrare a începutului său. Când serviciul este oprit, înregistrarea va fi executată din nou.
Serviciul poate fi instalat și îndepărtat prin utilizarea fișierelor setup.exe și FirstServices.msi, că, după construirea programului de instalare în directorul în care proiectul a fost creat de către programul de instalare în acest exemplu, C: # 92;. # 92; FirstService # 92; Debug # 92; și, în plus, aceste două fișiere sunt suficiente pentru a instala serviciul din orice director al oricărui computer.
În acest stadiu, am finalizat toți pașii necesari și am verificat serviciul nostru la locul de muncă. Apoi, puteți crea un proiect în modul Release (Build, Configuration Manager, Release). setup.exe și FirstServices.msi, după instalarea programului de instalare, vor fi localizate în directorul C: # 92; # 92; FirstServices # 92; bin # 92; Release). În plus, este posibilă umplerea funcționalității serviciului la discreția sa.
Îndepărtarea serviciului de pe computer este similară cu aplicația Windows obișnuită - (Setări / Panou de control / Adăugare pe Eliminare programe).
Pentru a seta un simplu mecanism de sondare, puteți utiliza componenta System.Timers.Timer. În metoda OnStart, puteți specifica parametrii pentru componentă. Cronometrul va efectua periodic unele acțiuni în cod (de exemplu, scrierea fișierului de timp curent, după cum se arată mai jos). Codul tocmai a adăugat componenta Timer și dispozitivul de tratare a evenimentului, care efectuează anumite acțiuni după ce sa specificat ora temporizatorului1.Interval.
spațiul de nume MyFirstService
public class1. ServiceBase
fișier privat StreamWriter;
// Definiți cronometrul
sistem privat System.Timers.Timer timer1;
protejarea suprascriirii void OnStart (string [] args)
fișier = nou StreamWriter (nou FileStream ("Service1.log",
System.IO.FileMode.Append));
this.file.WriteLine ("MyFirstService a început");
this.file.Flush ();
// Creați un cronometru și setați parametrii acestuia
this.timer1 = nou Sistem.Timers.Timer ();
this.timer1.Enabled = true;
// Interval 10000ms - 10s.
this.timer1.Interval = 100000;
this.timer1.Elapsed + =
Noul System.Timers.ElapsedEventHandler (this.timer1_Elapsed);
this.timer1.AutoReset = adevărat;
this.timer1.Start ();
>
protejat override void OnStop ()
this.timer1.Stop ();
this.file.WriteLine ("MyFirstService este oprit");
this.file.Flush ();
this.file.Close ();
>
privat privat
timer1_Elapsed (expeditor obiect, System.Timers.ElapsedEventArgs e)
// Scrieți timpul unui fișier sau faceți tot ce vrem
this.file.WriteLine (DateTime.Now.ToString ( "ZZ.LL.AAAA HH: mm: ss"));
this.file.Flush ();
>