IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Programovanie služieb vo Windows - 5.díl

Upravujeme Class - Service1: ServiceBase

Upravíme kód pre pripojenie k serveru:

public partial class Service1 : ServiceBase
{
    private const string SERVICENAME = "MojeService1"; //1
    private Server1 server1 = null;

    public Service1()
    {
        InitializeComponent();
        this.ServiceName = SERVICENAME;
        this.CanPauseAndContinue = true;  //2
        this.CanHandlePowerEvent = false; //3
        this.OnPowerEvent(PowerBroadcastStatus.BatteryLow); //4
        this.CanStop = true;  //5
        this.AutoLog = true;  //6
    }

    protected override void OnStart(@"C:\Temp\quotes.txt", 5678)
    {
        server1 = new Server1();  //reference na náš server
        server1.Start(args);
    }

    protected override void OnStop()
    {
        server1.Stop();
    }

    protected override void OnPause()
    {
        server1.Suspend();
    }
    protected override void OnContinue()
    {
        server1.Resume();
    }
    protected override void OnShutdown()
    {
        OnStop();
    }


    public const int commandRefresh = 128; //7
    protected override void OnCustomCommand(int command)
    {
        switch (command)
        {
            case commandRefresh:
                server1.RefreshQuotes();
                break;
            default:
                break;
        }
    }
}
  1. meno musí byť rovnaké ako v triede Installer
  2. sprístupní Pause a Continue
  3. získa alebo nastaví hodnotu označujúci či môže služba spracovať oznámenia zmeny stavu napájania počítača
  4. označuje stav napájania systému
  5. získa alebo nastaví hodnotu označujúci či možno službu zastaviť akonáhle bola zahájená
  6. označuje, či správu príkazy spustiť, zastaviť, pozastaviť a pokračovať v denníku udalostí EventLog.Source
  7. slúži na spúšťanie vlastných príkazov, ktoré sú službe posielané programom riadenia služby. Štruktúra metódy OnCustomCommand (int i) obsahuje argument typu int, v ktorom je číslo vlastného príkazu. Hodnota tohto čísla leží v rozsahu 128 až 256, nižšie hodnoty sú rezervované pre systém.
  8. načíta vlastné príkaz v tomto prípade súbor. Tento príkaz sa vykoná vždy ako prvý príkaz po spustení služby. Súbor musí mať zapísaný celý path a nesmie obsahovať dvojitá lomky! Ak Nespúšťam vlastné príkazy, je položka 7 a 8 vynechaná. Súbor v tomto prípade musí existovať tak aj nejaký obsah musí mať. Je priložený ukážkový súbor. Môžeme používať čokoľvek, nemusí to byť súbor.

Class Server1: Component - úprava komponenty

Ak nebudete používať počítadlá výkonu a ak nie sú registrované, musíme odstrániť odkazy na performanceCou­nter. Chýba kolekcia v počítadlách výkonu a server by nešiel spustiť.

Architektúra protokolovanie udalostí - komponenta EventLog

Architektúra protokolovanie:

  • súbor aplikácie
  • súbor zabezpečenia
  • súbor systém

Udalosti v denníku udalostí:

  • Typ (Informácie, Upozornenie, Chyba)
  • Dátum a čas
  • Zdroj udalosti (softvér, ktorý udalosť vyvolal)

HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ EventLog \ Application \ (názov aplikácie).

  • V tomto kľúči je tiež hodnota EventMessageFile, ktorá ukazuje na dynamickú knižnicu zdrojov s chybovými hláseniami.
  • Kategórie (dávajú možnosť filtrovať udalosti)

Triedy protokolovanie udalostí (System.Diagnos­tics)

  • EventLog - čítať a zapisovať záznamy v protokole
  • EventLogEntry zastupuje záznam v denníku udalostí
  • EventLogEntry­Collection prechádzame položky v EventLogEntry
  • EventLogInstaller slúži ako inštalátor EventLog. Volá pre vytvorenie zdroja udalostnej metódu EventLog.Crea­teEventSource.
  • EventLogTrace­Listener ukladáme do denníka udalostí záznamy trastování. Implementuje abstraktné triedu TraceListener.

Ako pridávame protokolovanie udalostí

Trieda ServiceBase, vlastnosť Autolog = true, potom je protokolovanie automaticky zapnuté. Vytvorí sa trieda EventLogInstaller pre konfiguráciu zdroje a protokoluje (štart, Stop, Pozastaviť a pokračovať). Udalosti sa zapisujú metódou WriteEntry () triedy EventLog. EventLogl.Wri­teEntry ( "Toto je správa denníka udalostí"). Upozornenia a chyby sa riešia preťažením metódy WriteEvent ():

EventLogl.WriteEntry("Toto je zpráva protokolu událostí",EventLogEntryType.Warning);
EventLogl.WriteEntry("Toto je zpráva protokolu událostí",EventLogEntryType.Error);

Problém security - Nemáme oprávnenia

Ak nie sme prihlásení ako "administrátor", môžeme obdržať túto chybovú hlášku. V súbore cmd.exe nemáme označené políčko Spustiť ako správca.

error Security - C # - Pre pokročilých C # - Pre pokročilých

Register

Ak je naša služba správne nainštalovaná, je zapísaná v registri v kľúči:
[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ (názov aplikácie)]

register slervice - C # - Pre pokročilých

Čo robiť pri uvedenej chybe?

vážna chyba - C # - Pre pokročilých

Táto chyba vznikne po hrubej chybe v programe, je potrebné pokúsiť sa odinštalovať službu napríklad aj niekoľkokrát, vymazať v registri kľúč MojeService1, reštartovať počítač. Nesnažte sa čokoľvek dopisovať do kľúča "Service", poškodíte databázu služieb (chyba 7005) a toto nemožno odstrániť, odporúčajú preinštalovať Windows. Ak je služba spustená, nepokúšajte sa ju odinštalovať!

Záver

Je potrebné si uvedomiť, že tieto diely tutoriálu sú len základom tvorby služieb vo Windows. Dúfam, že sa mi to aspoň trochu podarilo načrtnúť. Snáď tento tutoriál rozšíria vaše vedomosti a posunie vás o kúsok ďalej. Zdrojové kódy je možné bez problému skompilovať vo VS 2013. Ak chcete spustiť aplikáciu vo 2013 a máte vytvorenú aplikáciu vo 2010, potom premenujte vašu službu, urobíte si zbytočne chyby v registri, veľmi ťažko sa odstraňujú.

V zložke sú Pomenované kanály a Asynchrónny kanály, ukážka prenosu dát mimo protokol IP. Sú nakopírované do formulára tried pre prehľadnosť. O tejto problematike snáď niekedy inokedy.

Dokument Chyby a odkazy ukazuje na riešenie niektorých problémov. Súbor quotest.txt je pomocný dokument pre testovanie.

Tu ešte nejasajme, ak máte službu odladenú, je potrebné ju nainštalovať do zložky "Windows / system32 /" pomocou inštalačného programu.

Táto služba bola postavená na báze IP. V ďalšom diele je funkčná ukážka Klient - Server prenos pomocou rúry (Pipes). Server je vytvorený ako pomenovaná rúra pomocou prekrývajúceho I / O. Jedná sa o jednovláknovou server, ktorý využíva prekrývajúce sa operácie pre pripojenie viac klientov. Je napísaný v C ++. Ukážka sa dá celkom ľahko upraviť pre .NET bez použitia Plnvoke.

Na záver by som chcel poďakovať Davidovi Čapka za pomoc pri korekcii a úprave týchto článkov.

Ďakujem za trpezlivosť a peknú čítanie.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 88x (358.36 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Všetky články v sekcii
C # - Pre pokročilých
Článok pre vás napísal zpavlu
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
C# , C++ a assembler
Aktivity