Megosztás a következőn keresztül:


Bevezetés a Windows-szolgáltatásalkalmazások használatába

Feljegyzés

Ez a cikk nem vonatkozik a .NET-ben üzemeltetett szolgáltatásokra. A Windows-szolgáltatások és Microsoft.Extensions.Hosting.BackgroundService a Worker Service-sablon legújabb tartalmaiért tekintse meg a következőt:

A Microsoft Windows-szolgáltatások, korábbi nevén NT-szolgáltatások lehetővé teszik, hogy hosszú ideig futó végrehajtható alkalmazásokat hozzon létre, amelyek saját Windows-munkameneteikben futnak. Ezek a szolgáltatások automatikusan elindíthatók a számítógép indításakor, szüneteltethetők és újraindíthatók, és nem jelennek meg felhasználói felületek. Ezek a funkciók ideálissá teszik a szolgáltatásokat a kiszolgálón való használatra, vagy ha olyan hosszan futó funkciókra van szüksége, amelyek nem zavarják az ugyanazon a számítógépen dolgozó többi felhasználót. Olyan szolgáltatásokat is futtathat egy adott felhasználói fiók biztonsági környezetében, amely eltér a bejelentkezett felhasználótól vagy az alapértelmezett számítógépfióktól. A szolgáltatásokról és a Windows-munkamenetekről további információt a Windows SDK dokumentációjában talál.

Egyszerűen létrehozhat szolgáltatásokat egy szolgáltatásként telepített alkalmazás létrehozásával. Tegyük fel például, hogy figyelni szeretné a teljesítményszámláló adatait, és reagálni szeretne a küszöbértékekre. Írhat windowsos szolgáltatásalkalmazást, amely figyeli a teljesítményszámláló adatait, üzembe helyezi az alkalmazást, és megkezdi az adatok gyűjtését és elemzését.

A szolgáltatást Microsoft Visual Studio-projektként hozhatja létre, és olyan kódot határoz meg benne, amely szabályozza, hogy mely parancsok küldhetők el a szolgáltatásnak, és milyen műveleteket kell végrehajtani a parancsok fogadásakor. A szolgáltatásnak küldhető parancsok közé tartozik a szolgáltatás indítása, szüneteltetése, folytatása és leállítása; egyéni parancsokat is végrehajthat.

Az alkalmazás létrehozása és létrehozása után telepítheti a parancssori segédprogram InstallUtil.exe futtatásával és a szolgáltatás végrehajtható fájljának elérési útjának átadásával. Ezután a Szolgáltatásvezérlővel elindíthatja, leállíthatja, szüneteltetheti, folytathatja és konfigurálhatja a szolgáltatást. Ezeket a feladatokat a Kiszolgálókezelő Szolgáltatások csomópontjában vagy az ServiceController osztály használatával is elvégezheti.

Szolgáltatásalkalmazások és más Visual Studio-alkalmazások

A szolgáltatásalkalmazások többféleképpen működnek, mint sok más projekttípus:

  • A szolgáltatásalkalmazás-projekt által létrehozott lefordított végrehajtható fájlt telepíteni kell a kiszolgálóra, mielőtt a projekt értelmes módon működhet. Az F5 vagy az F11 billentyű lenyomásával nem lehet hibakeresést végezni vagy futtatni egy szolgáltatásalkalmazást; nem futtathat azonnal egy szolgáltatást, vagy nem léphet bele a kódjába. Ehelyett telepítenie és elindítania kell a szolgáltatást, majd csatolnia kell egy hibakeresőt a szolgáltatás folyamatához. További információ : A Windows-szolgáltatásalkalmazások hibakeresése.

  • Egyes típusú projektektől eltérően a szolgáltatásalkalmazásokhoz létre kell hoznia a telepítési összetevőket. A telepítési összetevők telepítik és regisztrálják a szolgáltatást a kiszolgálón, és létrehoznak egy bejegyzést a szolgáltatáshoz a Windows Services Control Managerrel. További információ : Telepítők hozzáadása a szolgáltatásalkalmazáshoz.

  • A Main szolgáltatásalkalmazás metódusának ki kell adnia a Futtatás parancsot a projekt által tartalmazott szolgáltatásokhoz. A Run metódus betölti a szolgáltatásokat a megfelelő kiszolgálón található Services Control Managerbe . Ha a Windows Services-projektsablont használja, a rendszer automatikusan megírja önnek ezt a módszert. Vegye figyelembe, hogy a szolgáltatás betöltése nem ugyanaz, mint a szolgáltatás indítása. További információt a "Szolgáltatás élettartama" című témakörben talál.

  • A Windows Service-alkalmazások egy másik ablakban futnak, mint a bejelentkezett felhasználó interaktív állomása. Az ablakállomás egy biztonságos objektum, amely vágólapot, globális atomkészletet és asztali objektumok egy csoportját tartalmazza. Mivel a Windows-szolgáltatás állomása nem interaktív állomás, a Windows-szolgáltatásalkalmazásban létrehozott párbeszédpanelek nem jelennek meg, és a program nem válaszol. Hasonlóképpen, a hibaüzeneteket nem a felhasználói felületen, hanem a Windows eseménynaplójában kell naplózni.

    A .NET-keretrendszer által támogatott Windows-szolgáltatásosztályok nem támogatják az interaktív állomásokkal, vagyis a bejelentkezett felhasználóval való interakciót. A .NET-keretrendszer az állomások és asztalok osztályait sem tartalmazza. Ha a Windows-szolgáltatásnak más állomásokkal kell együttműködnie, hozzá kell férnie a nem felügyelt Windows API-hoz. További információkért tekintse meg a Windows SDK dokumentációját.

    A Windows szolgáltatás és a felhasználó vagy más állomások közötti interakciót gondosan úgy kell megtervezni, hogy olyan forgatókönyveket is tartalmazzon, mint például hogy nincs bejelentkezve a felhasználó, vagy hogy a felhasználó váratlan asztali objektumokkal rendelkezik. Bizonyos esetekben célszerűbb lehet olyan Windows-alkalmazást írni, amely a felhasználó felügyelete alatt fut.

  • A Windows-szolgáltatásalkalmazások a saját biztonsági környezetükben futnak, és még azelőtt indulnak el, hogy a felhasználó bejelentkezik abba a Windows-számítógépre, amelyre telepítve vannak. Gondosan tervezze meg, hogy melyik felhasználói fiókon belül futtassa a szolgáltatást; a rendszerfiók alatt futó szolgáltatás több engedéllyel és jogosultsággal rendelkezik, mint egy felhasználói fiók.

Szolgáltatás élettartama

Egy szolgáltatás több belső állapoton megy keresztül az élettartama során. Először a szolgáltatás arra a rendszerre van telepítve, amelyen futni fog. Ez a folyamat végrehajtja a szolgáltatásprojekt telepítőit, és betölti a szolgáltatást a számítógép Services Control Managerébe . A szolgáltatások felügyeletéhez a Windows által biztosított központi segédprogram a Services Control Manager .

A szolgáltatás betöltése után el kell indítani. A szolgáltatás indítása lehetővé teszi a működés megkezdését. A szolgáltatást a Services Control Managerből, a Kiszolgálókezelőből vagy a kódból indíthatja el a Start metódus meghívásával. A Start metódus átadja a feldolgozást az alkalmazás metódusának OnStart , és feldolgozza az ott definiált kódot.

Egy futó szolgáltatás határozatlan ideig létezhet ebben az állapotban, amíg le nem áll vagy fel nem függeszti, vagy amíg a számítógép le nem áll. A szolgáltatás három alapállapot egyikében létezhet: Running, Pausedvagy Stopped. A szolgáltatás egy függőben lévő parancs állapotát is jelentheti: ContinuePending, PausePending, StartPendingvagy StopPending. Ezek az állapotok azt jelzik, hogy kiadtak egy parancsot, például egy futó szolgáltatás szüneteltetésére vonatkozó parancsot, de még nem hajtották végre. Lekérdezheti a Status lekérdezést annak megállapításához, hogy egy szolgáltatás milyen állapotban van, vagy a WaitForStatus művelet végrehajtásához, amikor ezek az állapotok bármelyike bekövetkezik.

Szüneteltetheti, leállíthatja vagy folytathatja a szolgáltatást a Services Control Managerből, a Kiszolgálókezelőből vagy a kód metódusainak meghívásával. Ezen műveletek mindegyike meghívhat egy társított eljárást a szolgáltatásban (OnStopvagy OnPauseOnContinue), amelyben további feldolgozást határozhat meg a szolgáltatás állapotának módosításakor.

Szolgáltatások típusai

A Visual Studióban kétféle szolgáltatás hozható létre a .NET-keretrendszer használatával. A folyamat egyetlen szolgáltatását képező szolgáltatásokhoz a rendszer a típust Win32OwnProcessrendeli hozzá. A folyamatokat egy másik szolgáltatással megosztó szolgáltatásokhoz a rendszer a típust Win32ShareProcessrendeli hozzá. A szolgáltatástípust lekérheti a ServiceType tulajdonság lekérdezésével.

Előfordulhat, hogy más szolgáltatástípusok is megjelennek, ha olyan meglévő szolgáltatásokat kérdez le, amelyek nem a Visual Studióban lettek létrehozva. Ezekről további információt a ServiceType.

Szolgáltatások és a ServiceController-összetevő

Az ServiceController összetevő egy telepített szolgáltatáshoz való csatlakozásra és állapotának módosítására szolgál. Egy összetevő használatával ServiceController elindíthat és leállíthat egy szolgáltatást, szüneteltetheti és folytathatja annak működését, és egyéni parancsokat küldhet egy szolgáltatásnak. Szolgáltatásalkalmazás létrehozásakor azonban nem kell összetevőt ServiceController használnia. Valójában az ServiceController összetevőnek a legtöbb esetben a szolgáltatást meghatározó Windows-szolgáltatásalkalmazástól eltérő alkalmazásban kell lennie.

További információ: ServiceController.

Követelmények

  • A szolgáltatásokat windowsos szolgáltatásalkalmazás-projektben vagy egy .NET-keretrendszer-kompatibilis projektben kell létrehozni, amely létrehoz egy .exe fájlt, és az osztálytól örökli.ServiceBase

  • A Windows-szolgáltatásokat tartalmazó projekteknek telepítési összetevőkkel kell rendelkezniük a projekthez és szolgáltatásaihoz. Ez egyszerűen elvégezhető a Tulajdonságok ablakból. További információ : Telepítők hozzáadása a szolgáltatásalkalmazáshoz.

Lásd még