Internetas. Kompiuteris. Pagalba. Patarimas. Remontas

Kokios Windows paslaugos reikalingos ir kurias galima išjungti. Kaip paleisti programą kaip „Windows“ paslaugą Kuriam vartotojui veikia paslaugos sistemoje „Windows“?

Kaip paleisti programą kaip „Windows“ paslaugą

Ar galima paleisti kliento programą kaip paslaugą? Viename iš jų aprašiau būdus, kaip sukurti Windows paslaugą naudojant standartinius OS įrankius. Tačiau ne kiekviena konsolės programa gali veikti kaip paslauga, o programos su grafine sąsaja iš esmės negali taip veikti. Tačiau vis tiek galima paleisti programą kaip paslaugą, o programa su originaliu pavadinimu mums tai padės Nesiurbimo paslaugų vadovas.

NSSM yra nemokama atvirojo kodo programinė įranga, kuri palaiko visas Microsoft operacines sistemas nuo Windows 2000 iki Windows 8. NSSM nereikia įdiegti, tiesiog atsisiųskite ir išpakuokite. Platinimas apima 32 ir 64 bitų operacinėms sistemoms skirtas versijas. Programą galite gauti iš svetainės nssm.cc, šiuo metu naujausia stabili versija yra 2.21.1, kurią naudosiu.

Norėdami parodyti NSSM galimybes, pabandykite paleisti Windows Notepad kaip paslaugą Windows 8.1.

Paslaugos kūrimas

Norėdami sukurti paslaugą pavadinimu Užrašų knygelė paleiskite komandų konsolę, eikite į aplanką su išpakuotu NSSM (64 bitų Windows) ir įveskite komandą nssm install notepad, kuri atveria NSSM grafinės diegimo programos langą. Norėdami sukurti paslaugą, lauke Path nurodykite kelią į vykdomąjį failą ir spustelėkite mygtuką „Įdiegti paslaugą“. Be to, lauke Parinktys galite nurodyti raktus, reikalingus paslaugai paleisti.

Kurdami naują paslaugą taip pat galite nurodyti kai kuriuos papildomus parametrus.

Skirtuke Išjungimas pateikiami išjungimo metodai ir skirtieji laikotarpiai, naudojami, kai programa išsijungia įprastai arba užstringa. Kai NSSM gauna sustabdymo komandą (pavyzdžiui, kai programa išjungiama), ji bando sustabdyti valdomą programą įprastu būdu. Jei programa neatsako, NSSM gali priverstinai nutraukti visus šios programos procesus ir antrinius procesus.

Yra keturi programos išjungimo veiksmai ir pagal numatytuosius nustatymus jie bus naudojami tokia tvarka:

Pirmajame etape NSSM bando sugeneruoti ir išsiųsti įvykį Ctrl + C.Šis metodas puikiai tinka konsolinėms programoms ar scenarijams, bet netaikomas grafinėms programoms;
Tada NSSM aptinka visus programos sukurtus langus ir siunčia jiems WM_CLOSE pranešimą, todėl programa išjungiama;
Trečias žingsnis yra tai, kad NSSM apskaičiuoja visas programos sukurtas gijas ir siunčia joms WM_QUIT pranešimą, kuris bus gautas, jei programa turės gijų pranešimų eilę;
Kraštutiniu atveju NSSM gali iškviesti TerminateProcess() metodą, priversdamas programą nutraukti.

Galima išjungti kai kuriuos ar net visus metodus, tačiau skirtingi metodai tinka skirtingoms programoms, todėl rekomenduojama viską palikti taip, kaip yra, kad programa būtų tinkamai išsijungusi.

Pagal numatytuosius nustatymus, kai paslauga sugenda, NSSM bando ją paleisti iš naujo. Skirtuke „Išeimo veiksmai“ galite pakeisti automatinį veiksmą, kai programa nutraukiama neįprastai, taip pat nustatyti delsą, kol programa automatiškai paleidžiama iš naujo.

Skirtuke „Įvestis / išvestis (I/O)“ galite nustatyti programos įvesties / išvesties nukreipimą į nurodytą failą.

Skirtuke „Aplinka“ galite nustatyti naujus paslaugos aplinkos kintamuosius arba nepaisyti esamų.

Taip pat galite nenaudoti grafinio apvalkalo ir iš karto sukurti paslaugą konsolėje naudodami šią komandą:

nssm įdiegti užrašų knygelę ″C:\Windows\system32\notepad.exe″

Paslaugų valdymas

Sukūrę paslaugą naudodami NSSM, eikite į Paslaugų papildinį ir suraskite užrašų knygelės paslaugą. Kaip matote, savo išvaizda jis niekuo nesiskiria nuo kitų paslaugų, taip pat galime jį paleisti, sustabdyti ar pakeisti paleidimo režimą. Tačiau atminkite, kad nssm.exe yra nurodytas kaip vykdomasis failas.

Ir jei eisime į Task Manager, pamatysime tokį vaizdą: NSSM veikia kaip pagrindinis (pagrindinis) procesas, užrašų knygelės paslauga veikia kaip antrinis procesas, o Notepad programa jau veikia šiame antriniame procese.

Paslaugos pašalinimas

Norėdami pašalinti paslaugą, įveskite komandą nssm Remove Notepad ir patvirtinkite jos pašalinimą. O įvedę komandą nssm remove notepad patvirtinti , galite apsieiti ir be patvirtinimo.

Pradėkite paslaugą interaktyviai

Pagrindinis skirtumas tarp vartotojo taikomosios programos ir paslaugos yra tas, kad paleidus programą gali prireikti papildomų vartotojo veiksmų, kad toliau veiktų, pavyzdžiui, paspausti mygtuką arba įvesti komandą. Norėdami tai padaryti, turite gauti prieigą prie jo, o tai, kaip paaiškėja, nėra taip lengva padaryti.

Norėdami paleisti paslaugą interaktyviuoju režimu, turite atidaryti jos ypatybes Paslaugų papildinyje ir skirtuke „Prisijungti“ pažymėkite žymimąjį laukelį „Leisti sąveiką su darbalaukiu“.

Ir tada prasideda stebuklai :) Interaktyviu režimu paleista paslauga atsidaro izoliuota sesija (0 sesija). Šį seansą galima pasiekti tik naudojant Interaktyvių paslaugų aptikimo paslaugą (ui0detect), kuri stebi interaktyvių paslaugų paleidimą kompiuteryje ir pateikia įspėjimą. „Windows 7\Server 2008“ ši paslauga yra aktyvi pagal numatytuosius nustatymus, tačiau „Windows 8\Server 2012“ ji yra išjungta ir nerodoma paslaugų grafiniame papildinyje (bent jau aš jos neradau). Be to, jei rasite šią paslaptingą paslaugą ir bandysite ją paleisti, gausite klaidos pranešimą.

Tačiau faktas yra tas, kad norėdami jį paleisti, turite leisti kompiuteryje veikti interaktyvioms paslaugoms. Todėl atidarykite registro rengyklę, skiltyje HKLM\System\CurrentControlSet\Control\Windows raskite DWORD tipo parametrą pavadinimu NoInteractiveServices ir nustatykite jo vertę 0 .

Tada atidarykite „PowerShell“ konsolę ir paleiskite aptikimo paslaugą naudodami komandą:

Start-Service -Name ui0detect

Įsitikinę, kad aptikimo paslauga veikia, iš naujo paleidžiame užrašų knygelės paslaugą ir gauname šį langą. Pasirinkite „Peržiūrėti pranešimą“

ir mes atsiduriame nulinėje sesijoje, kurioje veikia mūsų programa. Tada su juo atliekame reikiamus veiksmus ir grįžtame atgal.

Tai įdomus sprendimas paleisti programas kaip „Windows“ paslaugas. Ne pati gražiausia, bet visai atitinka pavadinimą :)

Paslaugų veikimą galite konfigūruoti specialioje „Windows“ tvarkyklėje. Norėdami jį atidaryti, naudokite Windows + R klavišų kombinaciją, pasirodžiusioje eilutėje įveskite services.msc ir paspauskite Enter. Pamatysite tą patį arba panašų (jei turite vieną iš senesnių OS versijų) langą:

Vadovas rodo paslaugas lentelės forma. Čia galite peržiūrėti galimų paslaugų sąrašą, perskaityti trumpus jų aprašymus ir sužinoti esamą būseną. Ypač svarbus yra stulpelis „Paleisties tipas“. Būtent jis parodo, ar konkreti paslauga įjungta ir kokiu režimu sistema ją paleidžia.

Dukart spustelėję vieną iš paslaugų, atsidarys langas, kuriame galėsite ją išjungti. Tiesiog atidarykite elementą "Startup Type", pasirinkite "Išjungta" ir spustelėkite "Gerai". Tačiau tarp kitų paleidimo parinkčių yra „Rankinis“ reikšmė. Saugumo sumetimais pasirinkite tai visoms paslaugoms, kurias norite išjungti. Tai leis sistemai paleisti paslaugas tada, kai jų tikrai reikia, o ne gaišti joms laiko likusį laiką.

Neišjunkite paslaugų visiškai, o tik perjunkite jas į rankinį režimą.

Žemiau išvardytos paslaugos nėra labai svarbios sistemos veikimui, todėl daugelis vartotojų gali apsieiti be jų. Todėl šias paslaugas galite nustatyti rankiniu režimu. Prieš atlikdami pakeitimus būtinai perskaitykite santrauką, kad nenutrauktumėte jums svarbių paslaugų.

Kai kurios mūsų sąraše esančios paslaugos jau gali būti visiškai išjungtos jūsų kompiuteryje arba iš pradžių veikia rankiniu režimu. Tokiu atveju tiesiog praleiskite juos.

Netinkami veiksmai konfigūruojant paslaugas gali lemti netinkamą sistemos veikimą. Atlikdami pakeitimus, prisiimate atsakomybę.

Kad pakeitimai įsigaliotų, po konfigūravimo būtinai iš naujo paleiskite kompiuterį.

„Windows“ paslaugos, kurias galima perjungti į rankinį režimą

Kai kurių šiame sąraše esančių paslaugų rusiški pavadinimai gali skirtis nuo tų, kuriuos matote savo kompiuteryje. Bet tai taikoma tik formulavimui. Jei negalite rasti reikalingos paslaugos pagal jos tikslų pavadinimą, ieškokite panašių parinkčių.

Windows 10

  • Funkcionalumas prisijungusiems vartotojams ir telemetrijai (Connected User Experiences ir Telemetrija).
  • Diagnostikos sekimo paslauga.
  • dmwappushsvc.
  • Atsisiųsta žemėlapių tvarkyklė – jei nenaudojate žemėlapių programos.
  • Palieskite Klaviatūros ir rašymo ranka skydelio paslauga.
  • „Windows Defender“ paslauga.

Windows 8/8.1

  • Diagnostikos politikos paslauga.
  • Distributed Link Tracking Client – ​​jei kompiuteris neprijungtas prie jokio tinklo.
  • IP Helper – jei nenaudojate IPv6 ryšio.
  • Programų suderinamumo asistento paslauga.
  • Spausdinimo kaupiklis – jei neturite spausdintuvo.
  • Nuotolinis registras – šią paslaugą galima visiškai išjungti.
  • Antrinis prisijungimas.
  • Apsaugos centras.
  • NetBIOS palaikymo modulis per TCP/IP (TCP/IP NetBIOS Helper).
  • „Windows“ klaidų ataskaitų tarnyba.
  • „Windows Image Acquisition“ (WIA) – jei neturite skaitytuvo.
  • „Windows Search“ – jei nenaudojate „Windows Search“.

Windows 7

  • Kompiuterio naršyklė – jei kompiuteris neprijungtas prie jokio tinklo.
  • Diagnostikos politikos paslauga.
  • Distributed Link Tracking Client – ​​jei kompiuteris neprijungtas prie jokio tinklo.
  • IP Helper – jei nenaudojate IPv6 ryšio.
  • Failai neprisijungę.
  • Nešiojamų įrenginių surašymo paslauga.
  • Spausdinimo kaupiklis – jei neturite spausdintuvo.
  • Apsaugota saugykla.
  • Nuotolinis registras – šią paslaugą galima visiškai išjungti.
  • Antrinis prisijungimas.
  • Apsaugos centras.
  • Serveris – jei kompiuteris nenaudojamas kaip serveris.
  • NetBIOS palaikymo modulis per TCP/IP (TCP/IP NetBIOS Helper).
  • „Windows“ klaidų ataskaitų tarnyba.
  • „Windows Search“ – jei nenaudojate „Windows Search“.

Windows Vista

  • Kompiuterio naršyklė – jei kompiuteris neprijungtas prie jokio tinklo.
  • Desktop Window Manager Session Manager – jei nenaudojate Aero temos.
  • Diagnostikos politikos paslauga.
  • Distributed Link Tracking Client – ​​jei kompiuteris neprijungtas prie jokio tinklo.
  • Failai neprisijungę.
  • Nešiojamų įrenginių surašymo paslauga.
  • Spausdinimo kaupiklis – jei neturite spausdintuvo.
  • ReadyBoost.
  • Nuotolinis registras – šią paslaugą galima visiškai išjungti.
  • Antrinis prisijungimas.
  • Apsaugos centras.
  • Serveris – jei kompiuteris nenaudojamas kaip serveris.
  • Planšetinio kompiuterio įvesties paslauga.
  • NetBIOS palaikymo modulis per TCP/IP (TCP/IP NetBIOS Helper).
  • Temos – jei naudojate klasikinę „Windows“ temą.
  • „Windows“ klaidų ataskaitų tarnyba.
  • „Windows Media Center“ paslaugų paleidimo priemonė.
  • „Windows Search“ – jei nenaudojate „Windows Search“.

Windows XP

  • Perspėjimas.
  • Kompiuterio naršyklė – jei kompiuteris neprijungtas prie jokio tinklo.
  • Distributed Link Tracking Client – ​​jei kompiuteris neprijungtas prie jokio tinklo.
  • Indeksavimo paslauga – jei nenaudojate „Windows“ paieškos.
  • Interneto užkarda (ICF) / interneto ryšio bendrinimas (ICS).
  • Messenger paslauga.
  • Nuotolinis registras – šią paslaugą galima visiškai išjungti.
  • Antrinis prisijungimas.
  • Serveris – jei kompiuteris nenaudojamas kaip serveris.
  • Sistemos atkūrimo paslauga.
  • NetBIOS palaikymo modulis per TCP/IP (TCP/IP NetBIOS Helper).
  • Nepertraukiamo maitinimo šaltinis.
  • Įkėlimo tvarkyklė.
  • Belaidžio ryšio konfigūracija (Wireless Zero Configuration).

Paskutinį kartą atnaujinta: 2015-10-31

Vienas iš svarbiausių Windows OS komponentų yra paslaugos. Tiesą sakant, tai yra atskiros programos, kurios neturi grafinės sąsajos ir atlieka įvairias užduotis fone. Paslaugas galima pradėti paleidus operacinę sistemą arba bet kuriuo kitu vartotojo darbo metu. Dažnas paslaugų pavyzdys yra įvairūs žiniatinklio serveriai, kurie fone klausosi konkretaus prievado prisijungimams ir, jei yra jungčių, su jais sąveikauja. Tai taip pat gali būti įvairios pagalbinės kitų įdiegtų programų naujinimo paslaugos, kurios susisiekia su serveriu, kad sužinotų, ar nėra naujos programos versijos. Apskritai galime atidaryti paslaugų skydelį ir patys pamatyti visas įdiegtas ir veikiančias paslaugas:

Pažiūrėkime, kaip sukurti savo paslaugas C#. Kaip įgyvendintiną užduotį pasirinksime stebėti pakeitimus konkrečiame failų sistemos aplanke. Dabar sukurkime paslaugą jai vykdyti.

Pirmiausia sukurkime naują projektą, kuris bus „Windows Service“ tipo. Pavadinkime projektą FileWatcherService:

Tada „Visual Studio“ sugeneruoja projektą, kuriame yra viskas, ko jums reikia. Nors nebūtinai turime pasirinkti tokio tipo projektą, galime sukurti klasės bibliotekos projektą ir tada jame apibrėžti visas reikalingas klases.

Taigi naujasis projektas atrodo taip:

Taip pat yra failas Program.cs ir tikrasis aptarnavimo mazgas Service1.cs.

Paslauga yra įprasta programa, tačiau ji nepasileidžia pati. Visi skambučiai ir prieiga prie jo vyksta per paslaugų valdymo tvarkyklę (Service Control Manager arba SCM). Kai paslauga paleidžiama automatiškai paleidžiant sistemą arba rankiniu būdu, SCM iškviečia pagrindinį metodą Programos klasėje:

Statinės klasės programa ( static void Main() ( ServiceBase ServicesToRun; ServicesToRun = new ServiceBase ( new Service1() ); ServiceBase.Run(ServicesToRun); ) )

Pagrindinis metodas apibrėžiamas pagal numatytuosius nustatymus, kad vienu metu paleistų kelias paslaugas, kurios yra apibrėžtos ServicesToRun masyve. Tačiau pagal numatytuosius nustatymus projekte yra tik viena paslauga – Service1. Pats paleidimas atliekamas naudojant Run metodą: ServiceBase.Run(ServicesToRun) .

Paleidžiama paslauga atstovaujama Service1.cs mazge. Tačiau iš tikrųjų tai nėra paprastas kodo failas. Jei atidarysime šį mazgą, pamatysime paslaugų kūrėjo failą Service1.Designer.cs ir Service1 klasę.

Service1 klasė iš tikrųjų reiškia paslaugą. Pagal numatytuosius nustatymus jis turi tokį kodą:

Sistemos naudojimas; naudojant System.Collections.Generic; naudojant System.ComponentModel; naudojant System.Data; naudojant System.Diagnostics; naudojant System.Linq; naudojant System.ServiceProcess; naudojant System.Text; naudojant System.Threading.Tasks; vardų sritis „FileWatcherService“ (viešoji dalinė klasė Service1: ServiceBase (viešoji paslauga1() ( InitializeComponent(); ) protected override void OnStart(string args) ( ) Protected override void OnStop() ( ) ) )

Paslaugų klasė turi būti paveldima iš ServiceBase bazinės klasės. Ši klasė apibrėžia daugybę metodų, iš kurių svarbiausi yra OnStart() metodas, kuris pradeda paslaugos atliekamus veiksmus ir OnStop() metodas, kuris sustabdo paslaugą.

Po to, kai SCM iškviečia pagrindinį metodą ir užregistruoja paslaugą, ji iškviečiama tiesiogiai naudojant OnStart metodą.

Kai paslaugų konsolėje arba komandinėje eilutėje siunčiame komandą sustabdyti paslaugą, SCM iškviečia OnStop metodą, kad ją sustabdytų.

Be šių dviejų paslaugų klasės metodų, galite nepaisyti dar kelių ServiceBase bazinės klasės metodų:

    OnPause: iškviečiama, kai paslauga pristabdyta

    OnContinue: iškviečiama, kai paslauga atnaujinama po to, kai ji buvo sustabdyta

    OnShutdown: iškviečiama, kai Windows išsijungia

    OnPowerEvent: iškviečiamas, kai pasikeičia maitinimo režimas

    OnCustomCommand: iškviečiama, kai paslauga gauna pasirinktinę komandą iš paslaugų valdymo tvarkyklės (SCM)

Service1 klasės konstruktoriuje iškviečiamas InitializeComponent() metodas, kuris yra apibrėžtas dizainerio faile Service1.Designer.cs:

Vardų sritis FileWatcherService ( dalinė klasė Service1 ( privatūs System.ComponentModel.IContainer komponentai = null; apsaugotas nepaisymas void Dispose(bool disposing) ( if (disposing && (components != null)) ( komponentai.Dispose(); ) base.Dispose(disposing ); ) private void InitializeComponent() ( komponentai = new System.ComponentModel.Container(); this.ServiceName = "Service1"; ) ) )

Vienintelis dalykas, į kurį reikia atkreipti dėmesį, yra paslaugos pavadinimo nustatymas (ypatybė ServiceName):

This.ServiceName = "1 paslauga";

Tai pavadinimas, kuris bus rodomas paslaugų konsolėje įdiegus šią paslaugą. Galime jį pakeisti arba palikti tokį, koks yra.

Dabar pakeiskime paslaugos kodą taip:

Sistemos naudojimas; naudojant System.ServiceProcess; naudojant System.IO; naudojant System.Threading; vardų sritis FileWatcherService ( vieša dalinė klasė Service1: ServiceBase ( Logger logger; public Service1() ( InitializeComponent(); this.CanStop = true; this.CanPauseAndContinue = true; this.AutoLog = true; ) apsaugotas nepaisymas void OnStart(string args) ( logger = new Logger(); Thread.Sleep(1000); ) ) class Logger ( FileSystemWatcher stebėtojas; objektas obj = naujas objektas (); bool įjungta = true; public Logger () ( stebėtojas = naujas FileSystemWatcher("D:\\Temp"); watcher.Deleted += Watcher_Deleted; watcher.Created + = Watcher_Created; Watcher.Changed += Watcher.Renamed += Watcher_Renamed = false = false ) // failų pervardijimas private void Watcher_Renamed(objekto siuntėjas, RenamedEventArgs e) ( string fileEvent = "pervardytas į " + e.FullPath; eilutė filePath = e.OldFullPath; RecordEntry(fileEvent, filePath); ) // failų keitimas privatus void Watcher_Changed(objekto siuntėjas, FileSystemEventArgs e) ( string fileEvent = "pakeista"; string filePath = e.FullPath; RecordEntry(fileEvent, filePath); ) // failų kūrimas privatus void Watcher_Created(objectEvent, FileSysys e) ( string fileEvent = "sukurta"; eilutė filePath = e.FullPath; RecordEntry(fileEvent, filePath); ) // failų ištrynimas private void Watcher_Deleted(objekto siuntėjas, FileSystemEventArgs e) ( string fileEvent = "ištrintas"; eilutės failoPath = e.FullPath; RecordEntry(fileEvent, filePath privatus void RecordEntry(string fileEvent, string filePath) ( lock (obj) ( naudojant (StreamWriter writer = new StreamWriter("D:\\templog.txt", true)) (rašytojas); .WriteLine(String.Format("(0) failas (1) buvo (2)", DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss"), filePath, fileEvent () ; ) ) )

Pagrindinė klasė, apimanti visas funkcijas, yra Logger klasė. Naudodamas „FileSystemWatcher“ objektą, jis stebės aplanko pakeitimus D://Temp. Metodas Start() nurodo, kad mes stebėsime pakeitimus per FileSystemWatcher objektą. Ir visas darbas tęsis tol, kol įgalintas loginis kintamasis bus teisingas. O Stop() metodas leis klasei baigti.

„FileSystemWatcher“ įvykiai leidžia stebėti visus stebimo aplanko pakeitimus. Taip bus įrašyti failo templog.txt pakeitimai. Kad būtų išvengta resursų lenktynių dėl templog.txt failo, kuriame įrašomi pakeitimai, įrašymo procedūra blokuojama lock(obj) stubu.

Dėl to, sukūrus, pakeitus, pervadinus ir ištrynus, žurnalo faile bus kažkas panašaus į:

2015-07-30 12:15:40 failas D:\Temp\Naujas tekstinis dokumentas.txt sukurtas 2015-07-30 12:15:46 failas D:\Temp\Naujas tekstinis dokumentas.txt pervardytas į D:\ Temp\hello txt 2015-07-30 12:15:55 failas D:\Temp\hello.txt pakeistas 2015-07-30 12:15:55 failas D:\Temp\hello.txt pakeistas 30 d. /2015 12:16:01 failas D: \Temp\hello.txt ištrintas

Pačioje Service1 paslaugų klasėje konstruktoriuje nustatyta keletas parinkčių:

This.CanStop = tiesa; // paslauga gali būti sustabdyta tai.CanPauseAndContinue = true; // paslauga gali būti pristabdyta ir toliau tęsiama.AutoLog = true; // tarnyba gali rašyti į žurnalą

Taikant OnStart() metodą, iškviečiama nauja gija Logger objektui paleisti:

Apsaugotas nepaisymas void OnStart(string args) ( logger = new Logger(); Thread loggerThread = new Thread(new ThreadStart(logger.Start)); loggerThread.Start(); )

Nauja gija reikalinga, nes dabartinė gija apdoroja tik SCM komandas ir turi kuo greičiau grįžti iš OnStart metodo.

Kai iš SCM gaunama komanda sustabdyti paslaugą, suaktyvinamas OnStop metodas, kuris iškviečia logger.Stop() metodą. Papildomas delsimas leis registravimo gijai sustabdyti:

Apsaugotas nepaisymas void OnStop() ( logger.Stop(); Thread.Sleep(1000); )

Tačiau pačios aptarnavimo klasės neužtenka. Taip pat turime sukurti paslaugų montuotoją.

Programinės įrangos suderinamumo požiūriu. Taigi natūralu, kad grįžtame prie paslaugų aptarimo „Windows 7“ kontekste. Tačiau šį kartą pakalbėsime apie kai kuriuos „Windows 7“ teikiamų paslaugų optimizavimo privalumus. Šis straipsnis yra apie naują „Windows 7“ funkciją – Paleisties paslaugos. Tačiau prieš pažvelgdami į API, pažvelkime į bendrą paslaugų vaizdą.

Kas yra paslaugos?

Paslauga yra vidinis mechanizmas, integruotas į Windows operacinę sistemą. Galite galvoti apie paslaugas kaip apie specialias programas, veikiančias nepriklausomai nuo esamo vartotojo konteksto. Paslaugos skiriasi nuo įprastų programų tuo, kad jas galima sukonfigūruoti veikti nuo sistemos įjungimo (pakrovimo) iki išjungimo, nereikalaujant vartotojo buvimo. Tai reiškia, kad paslaugos gali veikti, net jei vartotojas nėra prisijungęs.

Mes labiau vertiname paslaugas kaip vykdomas užduotis, kurios vykdomos fone ir neturi įtakos vartotojo operacijoms. „Windows“ paslaugos yra atsakingos už visų tipų foninę veiklą, pradedant nuotolinio procedūrų iškvietimu (RPC), spausdintuvo kaupikliu ir baigiant tinklo vietos suvokimu.

Bėgant metams „Windows“ augo ir paslaugų skaičius augo. Būkime atviri, „Windows“ foninės paslaugos yra šiek tiek skausmingos – operacinėje sistemoje yra daugybė paslaugų. Be to, nepriklausomi programinės įrangos kūrėjai (ISV) ir jų taikomosios programos prideda dar daugiau paslaugų. Pavyzdžiui, programinės įrangos atnaujinimo paslaugos. Tačiau kai kurios paslaugos yra labai svarbios ir būtinos įkrovos proceso metu, o kitos reikalingos vėliau, kai prisijungia konkretus vartotojas, o kitų nereikia iš viso paleisti, kol nebus iškviesta. Nepaisant to, kai žiūrite į šiuo metu veikiančių paslaugų sąrašą, matote daug objektų, kuriems nereikia dirbti 24x7.

Kas negerai su paslaugomis, kurios veikia 24 valandas per parą, 7 dienas per savaitę?

Yra keletas problemų, susijusių su 24x7 paslaugomis. Pirma, kodėl kažkas turėtų veikti (net fone), jei to nereikia? Bet koks vykdomas procesas (įskaitant paslaugas) naudoja brangius atminties ir procesoriaus išteklius, kurie gali būti naudojami kitoms programoms ir paslaugoms. Jei suskaičiuosite visas konkrečiu momentu veikiančias paslaugas, jos sudeda daug atminties, rankenėlių, gijų ir procesoriaus naudojimo. Visi šie „švaistomi“ resursai sumažina bendrą kompiuterio našumą, jo reagavimą, todėl kompiuteris atrodo vangus ir lėtas. Be to, kadangi daugelis paslaugų yra sukonfigūruotos taip, kad pradėtų veikti automatiškai (pradeda veikti, kai sistema paleidžiama), jos turi įtakos kompiuterio įkrovos laikui.

Antra, šie švaistomi ištekliai turi tiesioginės įtakos energijos suvartojimui. Kuo didesnė procesoriaus apkrova, tuo daugiau energijos sunaudoja kompiuteris. Tai gali būti labai svarbu nešiojamiesiems kompiuteriams ir gali sutrumpinti akumuliatoriaus veikimo laiką keliomis valandomis.

Trečia, nuolatinis neproduktyvios programinės įrangos veikimas gali sukelti atminties nutekėjimą ir bendrą sistemos nestabilumą. Dėl to sugenda programos ir galiausiai kompiuteris.

Galiausiai, jei paslauga veikia 24x7 ir jei tai yra gerai žinoma paslauga (kurią gali turėti kiekviena populiari programa, pvz., PDF skaitytuvas), tai sukuria didelį atakos paviršių. Užpuolikas gali pasinaudoti informacija, kad tam tikra populiari programa įdiegia visą parą veikiančią paslaugą, ir bandyti į ją įsilaužti, kad gautų prieigą prie kompiuterio.

Visa tai pasakius, jums gali kilti klausimas, kodėl tiek daug kūrėjų nustato savo paslaugas, kad jos veiktų visą laiką, jei turi kitą parinktį. Dar prieš Windows 7 buvo keletas paslaugų paleidimo parinkčių:

  • Išjungta visiškai išjungia paslaugą ir neleidžia jai bei priklausomoms paslaugoms paleisti – tai reiškia, kad vartotojas turi įjungti paslaugą rankiniu būdu iš valdymo skydelio arba komandų eilutės
  • vadovas paleidžia paslaugą, kai reikia (dėl priklausomybės nuo kitų paslaugų) arba kai paslauga iškviečiama iš programos naudojant atitinkamas API, kaip bus parodyta toliau
  • Automatinis paleidžia paslaugą prisijungus
  • Automatinis atidėtas– Windows Vista įdiegtas naujesnis paleidimo tipas, kuriuo paslauga paleidžiama pasibaigus įkrovimui ir atlikus pradines operacijas, o tai pagreitina sistemos paleidimą.

Deja, daugelis ISV (įskaitant pačią „Microsoft“) ir toliau nustato savo paslaugas į „Automated“ arba „Automatic Delayed“, nes atrodo, kad tai yra paprasčiausias sprendimas visiems. Paslauga tiesiog veikia 24x7 ir yra visada pasiekiama, todėl nereikia tikrinti priklausomybių arba ar paslauga veikia.

Yra daugybė esamų paslaugų pavyzdžių, kurios gali naudoti daug mažiau išteklių ir tapti saugesnės nedirbdamos 24x7. Pavyzdžiui, pagalvokite apie naujinimo paslaugą, kuri tikrina, ar nėra naujų programos naujinimų. Jei kompiuteris neprijungtas prie tinklo ir neturi IP adreso, kodėl jis turėtų veikti? Tai nieko negali padaryti, tad kam palikti veikti programą, kuri nieko nedaro? Pagalvokite apie strategijos valdymo paslaugą, kuri naudojama keičiant grupės strategijas arba kai kompiuteris prisijungia prie domeno arba iš jo išeina, tačiau dabar, kai kompiuteris prijungtas prie mano namų tinklo, paslauga vėl veikia tuščiai.

Trigeriu pagrįstų paslaugų atsiradimas

Aukščiau pateiktų problemų sprendimas yra perkelti paslaugą iš „visada įjungtos“ į kitų tipų foninę veiklą, pvz., suplanuotas užduotis arba suaktyvintas paslaugas. Šis straipsnis yra apie „Windows 7 Trigger Start Services“. Apie „Windows 7“ suplanuotas užduotis galima pasakyti daug įdomių dalykų, kurie bus atlikti tolesniuose straipsniuose.

Ar galima paleisti kliento programą kaip paslaugą? Ne kiekviena konsolės programa gali veikti kaip paslauga, o programos su grafine sąsaja iš esmės negali veikti tokiu būdu. Tačiau vis tiek galima paleisti programą kaip paslaugą, o programa su originaliu pavadinimu mums tai padės Nesiurbimo paslaugų vadovas.

NSSM yra nemokama atvirojo kodo programinė įranga, kuri palaiko visas operacines sistemas Microsoft, pradedant Windows 2000 ir baigiant . NSSM nereikia įdiegti, tiesiog atsisiųskite ir išpakuokite. Platinimas apima 32 ir 64 bitų operacinėms sistemoms skirtas versijas. Programą galite gauti iš svetainės nssm.cc, šiuo metu naujausia stabili versija yra 2.21.1, kurią naudosiu.

Norėdami parodyti NSSM galimybes, pabandykime paleisti Notepad kaip paslaugą .

Paslaugos kūrimas

Norėdami sukurti paslaugą pavadinimu Užrašų knygelė paleiskite komandų konsolę, eikite į aplanką su išpakuotu NSSM (64 bitų Windows) ir įveskite komandą nssm install notepad, kuri atidaro NSSM grafinės diegimo programos langą. Norėdami sukurti paslaugą, lauke Path nurodykite kelią į vykdomąjį failą ir spustelėkite mygtuką „Įdiegti paslaugą“. Be to, lauke Parinktys galite nurodyti raktus, reikalingus paslaugai paleisti.

Kurdami naują paslaugą taip pat galite nurodyti kai kuriuos papildomus parametrus.

Skirtuke „Išjungimas“ pateikiami išjungimo būdai ir skirtieji laikotarpiai, naudojami, kai programa išsijungia įprastai arba užstringa. Kai NSSM gauna sustabdymo komandą (pavyzdžiui, kai programa išjungiama), ji bando sustabdyti valdomą programą įprastu būdu. Jei programa neatsako, NSSM gali priverstinai nutraukti visus šios programos procesus ir antrinius procesus.

Yra keturi programos išjungimo veiksmai ir pagal numatytuosius nustatymus jie bus naudojami tokia tvarka:

Pirmajame etape NSSM bando sugeneruoti ir išsiųsti įvykį Ctrl + C.Šis metodas puikiai tinka konsolinėms programoms ar scenarijams, bet netaikomas grafinėms programoms;
Tada NSSM aptinka visus programos sukurtus langus ir siunčia jiems WM_CLOSE pranešimą, todėl programa išjungiama;
Trečias žingsnis yra tai, kad NSSM apskaičiuoja visas programos sukurtas gijas ir siunčia joms WM_QUIT pranešimą, kuris bus gautas, jei programa turės gijų pranešimų eilę;
Kraštutiniu atveju NSSM gali iškviesti TerminateProcess() metodą, priversdamas programą nutraukti.

Galima išjungti kai kuriuos ar net visus metodus, tačiau skirtingi metodai tinka skirtingoms programoms, todėl rekomenduojama viską palikti taip, kaip yra, kad programa būtų tinkamai išsijungusi.

Pagal numatytuosius nustatymus, kai paslauga sugenda, NSSM bando ją paleisti iš naujo. Skirtuke „Išėjimo veiksmai“ galite pakeisti automatinį veiksmą, kai programa nutrūksta neįprastai, taip pat nustatyti delsą, kol programa automatiškai paleidžiama iš naujo.

Skirtuke „Įvestis / išvestis (I/O)“ galite nustatyti programos įvesties / išvesties nukreipimą į nurodytą failą.

Skirtuke „Aplinka“ galite nustatyti naujus paslaugos aplinkos kintamuosius arba nepaisyti esamų.

Taip pat galite nenaudoti grafinio apvalkalo ir iš karto sukurti paslaugą konsolėje naudodami šią komandą:

nssm įdiegti užrašų knygelę ″C:\Windows\system32\notepad.exe″

Paslaugų valdymas

Sukūrę paslaugą naudodami NSSM, eikite į Paslaugų papildinį ir suraskite užrašų knygelės paslaugą. Kaip matote, savo išvaizda jis niekuo nesiskiria nuo kitų paslaugų, taip pat galime jį paleisti, sustabdyti ar pakeisti paleidimo režimą. Tačiau atminkite, kad nssm.exe yra nurodytas kaip vykdomasis failas.

Ir jei eisime į Task Manager, pamatysime tokį vaizdą: NSSM veikia kaip pagrindinis (pagrindinis) procesas, užrašų knygelės paslauga veikia kaip antrinis procesas, o Notepad programa jau veikia šiame antriniame procese.

Paslaugos pašalinimas

Norėdami pašalinti paslaugą, įveskite komandą nssm Remove Notepad ir patvirtinkite jos pašalinimą. O įvedę komandą nssm remove notepad patvirtinti, galite apsieiti ir be patvirtinimo.

Pradėkite paslaugą interaktyviai

Pagrindinis skirtumas tarp vartotojo taikomosios programos ir paslaugos yra tas, kad paleidus programą, norint toliau veikti, vartotojas gali reikalauti papildomų veiksmų – pavyzdžiui, paspausti mygtuką arba įvesti komandą. Norėdami tai padaryti, turite gauti prieigą prie jo, o tai, kaip paaiškėja, nėra taip lengva padaryti.

Norėdami paleisti paslaugą interaktyviuoju režimu, turite atidaryti jos ypatybes Paslaugų papildinyje ir skirtuke „Prisijungti“ pažymėkite žymimąjį laukelį „Leisti sąveiką su darbalaukiu“.

Ir tada prasideda stebuklai Interaktyviu režimu veikiančiai paslaugai sistema atidaro atskirą izoliuotą seansą (0 sesija). Šį seansą galima pasiekti tik naudojant Interaktyvių paslaugų aptikimo paslaugą (ui0detect), kuri stebi interaktyvių paslaugų paleidimą kompiuteryje ir pateikia įspėjimą. „Windows 7\Server 2008“ ši paslauga yra aktyvi pagal numatytuosius nustatymus, tačiau „Windows 8\Server 2012“ ji yra išjungta ir nerodoma paslaugų grafiniame papildinyje (bent jau aš jos neradau). Be to, jei rasite šią paslaptingą paslaugą ir bandysite ją paleisti, gausite klaidos pranešimą.

Tačiau faktas yra tas, kad norėdami jį paleisti, turite leisti kompiuteryje veikti interaktyvioms paslaugoms. Todėl atidarykite registro rengyklę, skiltyje HKLM\System\CurrentControlSet\Control\Windows raskite DWORD tipo parametrą pavadinimu NoInteractiveServices ir nustatykite jo vertę 0 .

Tada atidarykite „PowerShell“ konsolę ir paleiskite aptikimo paslaugą naudodami komandą:

Start-Service -Name ui0detect

Įsitikinę, kad aptikimo paslauga veikia, iš naujo paleidžiame užrašų knygelės paslaugą ir gauname šį langą. Pasirinkite "Peržiūrėti pranešimą"

ir mes atsiduriame nulinėje sesijoje, kurioje veikia mūsų programa. Tada su juo atliekame reikiamus veiksmus ir grįžtame atgal.

Tai įdomus sprendimas paleisti programas kaip „Windows“ paslaugas. Ne pati gražiausia, bet visai atitinkanti savo pavadinimą

Ar jums patiko straipsnis? Pasidalinkite su draugais!
Ar šis straipsnis buvo naudingas?
Taip
Nr
Ačiū už jūsų atsiliepimus!
Kažkas nutiko ir jūsų balsas nebuvo įskaitytas.
Ačiū. Jūsų žinutė buvo išsiųsta
Radote klaidą tekste?
Pasirinkite jį, spustelėkite Ctrl + Enter ir mes viską sutvarkysime!