Windows 7 - - - (- - 1) - Windows 7 blog pentru dezvoltatori

Ce este un serviciu?

Preferăm să ia în considerare acest serviciu ca sarcini care rulează în fundal fără a interfera cu operațiunile utilizatorului. Servicii Windows sunt responsabile pentru toate tipurile de activitate de fond, începând cu apelul Remote Procedure (RPC), Derulator imprimantă și până la Locația rețelei de conștientizare.

Ce e în neregulă cu serviciile care rulează 24 de ore pe zi, 7 zile pe săptămână?

Există mai multe probleme asociate cu serviciile care rulează 24x7. În primul rând, de ce ar trebui să lucreze ceva (chiar și în fundal), în cazul în care nu este nevoie? Orice proces care rulează (inclusiv serviciu) utilizează memorie și CPU prețioase resurse care ar putea fi utilizate pentru alte aplicații și servicii. Dacă se calculează toate serviciile care se execută la un moment dat, se vor dezvolta într-o cantitate semnificativă de memorie, mânere, fire și utilizarea procesorului. Toate aceste resurse „irosite“ reduce performanța generală a computerului, capacitatea de a răspunde și să dea impresia că computerul este lent și lent. În plus, deoarece multe servicii sunt configurate pentru a porni automat (începe să ruleze la pornire), ele influențează timpul de boot al computerului.

Resurse În al doilea rând, aceste irosite, un impact direct asupra consumului de energie electrică. Cea mai mare sarcina pe CPU, computerul consumă mai multă energie electrică. Acest lucru poate fi extrem de important pentru laptop-uri și poate reduce durata de viață a bateriei pentru câteva ore.

În al treilea rând, software-ul de lucru neproductivă constantă poate provoca instabilitatea sistemului de memorie de scurgere și de ansamblu. Acest lucru conduce la o funcționare defectuoasă a cererii și, în final, calculatorul.

În cele din urmă, în cazul în care serviciul se execută 24x7, iar dacă acesta este un serviciu bine cunoscut (care nu poate fi popular în orice aplicație - de exemplu, PDF Reader), creează o suprafață mai mare de atac. Un atacator poate folosi informațiile pe care o anumită aplicație populară instalează un serviciu care se execută 24x7, și să încerce să-l sparge pentru a avea acces la calculator.

Acestea fiind spuse, vă întrebați de ce atât de mulți dezvoltatori configura serviciile lor pe un loc de muncă permanent în cazul în care au o altă oportunitate. Chiar înainte ca Windows 7 câteva moduri de a porni serviciul a fost disponibil:

  • Pentru persoane cu handicap (dezactivat) dezactivează complet serviciul și împiedică rularea și să înceapă serviciile dependente - aceasta înseamnă că utilizatorul trebuie să permită manual serviciul de la panoul de control sau de la linia de comandă
  • Manual (Manual) pornește serviciul după cum este necesar (din cauza dependențele altor servicii), sau atunci când serviciul este invocat prin intermediul aplicațiilor API relevante, după cum va fi prezentat mai jos
  • Automat (Auto) pornește serviciul la conectare
  • Întârziat (pornire întârziată automată) automată - un nou tip de pornire, introdus în Windows Vista, cu ajutorul căreia lansarea serviciului are loc după ce descărcarea este completă și de a efectua operațiuni inițiale, care accelerează sistemul de lansare.

Din păcate, multe ISV (inclusiv Microsoft Corporation în sine) să continue pentru a personaliza serviciul lor în mod automat (automat) sau pornire întârziată automată (Automatic întârziată), din moment ce toate par soluția cea mai simplă. Serviciul funcționează doar 24/7 și este întotdeauna disponibil, eliminând necesitatea de a verifica dependențele sau dacă serviciul rulează.

Apariția serviciilor cu lansarea pe trăgaci

Ultimul punct se referă la extensibilitate. Dezvoltatorul poate configura orice eveniment ETW ca un declanșator pentru un serviciu care oferă un bun instrument pentru a gestiona pornirea și oprirea serviciilor de aplicare.

Deci, ce este pe trăgaci?

Un declanșator este compus din:

  • Tipul de eveniment declanșator
  • eveniment Subtip de declanșare
  • Acțiunile care trebuie întreprinse la apariția unui eveniment declanșator
  • Unul sau mai multe elemente de date asociate cu declanșare (pentru anumite tipuri de evenimente de declanșare)

Subtip și elemente asociate de date de declanșare specifica împreună condițiile pentru serviciul de notificare a evenimentului. Formatul element de date depinde de tipul de eveniment declanșator; element de date poate consta dintr-un binar, șir sau mai multe linii de date.

Lucrul cu declanșatoare Start Servicii

Din păcate, interfața cu utilizatorul de Windows 7 consola MMC Servicii, nici o reprezentare grafică de declanșare Start Servicii. Cu toate acestea, aveți două opțiuni. Puteți utiliza în continuare bun de configurare a serviciului de linie de comandă veche - Sc.exe sau de a folosi metoda WIN32 ChangeServiceConfig2 pentru configurarea software-ului parametrii de servicii de pornire, după cum vor fi afișate în acest articol.

Utilizarea Sc.exe cerere de declanșare de serviciu de date (interogare Serviciul de declanșare Informații)

Este timpul să te distrezi. Să începem cu informații despre configurația unor servicii. Forma generală pentru utilizarea configurației serviciului este după cum urmează:

În cazul în care serverul este un parametru opțional care indică calculatorul (în mod implicit, lucrați cu un computer local):

  • comandă - o operațiune care trebuie efectuată, de exemplu, să declanșeze o cerere de date
  • Numele de serviciu - este numele serviciului, care va funcționa
  • - opțiuni diferite valori (parametrii) care pot fi efectuate pentru a configura serviciul

Să începem cu o cerere de serviciu special cu privire la configurația sa de declanșare. Pentru aceasta avem nevoie pentru a rula fereastra pentru Windows Shell:

1. Deschideți meniul „Start“.

2. Tipul cmd în caseta de căutare.

3. Selectați cmd.exe.

4. Introduceți sc qtriggerinfo w32time, apoi apăsați tasta enter.

Iată cum ar trebui să arate:

După cum puteți vedea, am solicitat W32time date de declanșare serviciu care este configurat pentru a începe atunci când conectați un computer la domeniul și se va opri atunci când deconectat de domeniu.

Microsoft a actualizat Windows 7 linie de comandă aplicație Sc.exe pentru a sprijini configurarea și declanșatoarele acceptate. Intră sc triggerinfo în Windows Shell fereastra și apăsați Enter. Rezultatul va fi similar cu cel prezentat mai jos, și va conține toate declanșatorii și informații cu privire la modul de configurare a serviciului de a le utiliza.

ProgrammnayanastroykaTrigger Start ServicespripomoschiChanceServiceConfig2

Mai interesant în ceea ce privește aspectul de dezvoltare este crearea de servicii, în funcție de trăgaci, și de a folosi codul pentru a configura serviciul. În Windows 7, puteți utiliza caracteristica pentru a ajusta datele de declanșare de serviciu ChangeServiceConfig2 și funcția QueryServiceConfig2 să le numim.

Înregistrarea este ChangeServiceConfig2 serviciu de declanșare apel folosind SERVICE_CONFIG_TRIGGER_INFO pentru dwInfoLevel reprezentare parametru și de declanșare achiziție a datelor în structura SERVICE_TRIGGER_INFO prin setarea lpInfo. În plus, pot fi specificate mai multe date de declanșare. Mai jos este un exemplu al unei funcții de instalare serviciu care creează un serviciu de declanșare USB dispozitiv numit MyService:

Notă: Toate serviciile sunt controlate de Control Service Manager de (CSM), pe care le vom discuta într-un alt articol.

Se poate vedea în fragmentul de cod de mai sus, vom obține mai întâi un mâner (hScm) SCM provocare openSCManager. În continuare, noi numim openService și să definească mânerul CSM - hscm, și numele de serviciu - SERVICE_NAME, la care doresc să acceseze. Ultimul parametru, SERVICE_ALL_ACCESS, indică faptul că avem acces deplin la serviciile. Presupunând că acum există un mâner valid, vom începe să creeze o structură separată, pe care îl vom folosi în curând pentru a configura serviciul.

SERVICE_TRIGGER_SPECIFIC_DATA_ITEM specifică tipul de eveniment declanșator. Acesta conține date despre serviciul eveniment de declanșare. În cazul nostru, vom defini un șir de caractere care descrie conexiunea USB-drive.

Apoi ne-am stabilit SERVICE_TRIGGER structura, care este un eveniment declanșator de serviciu. Rețineți că acest lucru este în cazul în care ne-am stabilit tipul de declanșare (dispozitiv de conectare), acțiunea (începutul serviciului), și subtipul de declanșare (un anumit tip de USB-drive). Apoi definim un dispozitiv care va cauza serviciului. Rețineți că puteți selecta o listă de dispozitive și GUID lor. De asemenea, trebuie remarcat faptul că noi nu vrem serviciu să fie declanșat la conectarea orice-dispozitive USB, cum ar fi un mouse sau un aparat de fotografiat. Dorim ca serviciul să înceapă numai atunci când USB-drive.

În cele din urmă, vom defini structura SERVICE_TRIGGER_INFO care conține declanșatorul de servicii de date eveniment. Această structură indică pur și simplu structura SERVICE_TRIGGER am cerut mai devreme, iar numărul de flip-flops, numărul de care în acest caz este egal cu unu.

Acum putem apela funcția ChanceServiceConfig2 și să treacă un mâner pentru serviciul pe care doriți să configurați, un parametru SERVICE_CONFIG_TRIGGER_INFO, ceea ce indică faptul că dorim să configurați serviciul de afișare, și Null.

Asta e tot. Dacă ați făcut totul corect, serviciul va rula după ce conectați un hard disk USB.

În următorul articol voi discuta despre cum să scrie o implementare simpla a unui serviciu .NET care ne-am înființat pentru a lansa atunci când conectați unitatea USB.

Puteți lucra, de asemenea, în Windows 7 declanșatoare Start Servicii cu Windows 7 Curs online. face parte din 9 Learning Center canal.