Inleiding tot Windows-servicetoepassingen
Notitie
Dit artikel is niet van toepassing op gehoste services in .NET. Zie voor de nieuwste inhoud van Windows-services die gebruikmaken van Microsoft.Extensions.Hosting.BackgroundService en de worker-servicesjabloon:
Met Microsoft Windows-services, voorheen bekend als NT-services, kunt u langlopende uitvoerbare toepassingen maken die worden uitgevoerd in hun eigen Windows-sessies. Deze services kunnen automatisch worden gestart wanneer de computer wordt opgestart, kan worden onderbroken en opnieuw worden opgestart en geen gebruikersinterface weergeven. Deze functies maken services ideaal voor gebruik op een server of wanneer u langlopende functionaliteit nodig hebt die geen invloed heeft op andere gebruikers die op dezelfde computer werken. U kunt ook services uitvoeren in de beveiligingscontext van een specifiek gebruikersaccount dat verschilt van de aangemelde gebruiker of het standaardcomputeraccount. Zie de Windows SDK-documentatie voor meer informatie over services en Windows-sessies.
U kunt eenvoudig services maken door een toepassing te maken die als een service is geïnstalleerd. Stel dat u prestatiemeteritems wilt bewaken en wilt reageren op drempelwaarden. U kunt een Windows-servicetoepassing schrijven die luistert naar de prestatiemeteritemgegevens, de toepassing implementeert en begint met het verzamelen en analyseren van gegevens.
U maakt uw service als een Microsoft Visual Studio-project, waarbij u code definieert die bepaalt welke opdrachten naar de service kunnen worden verzonden en welke acties moeten worden uitgevoerd wanneer deze opdrachten worden ontvangen. Opdrachten die naar een service kunnen worden verzonden, zijn onder andere starten, onderbreken, hervatten en stoppen van de service; u kunt ook aangepaste opdrachten uitvoeren.
Nadat u de toepassing hebt gemaakt en gebouwd, kunt u deze installeren door het opdrachtregelprogramma uit te voeren InstallUtil.exe en het pad door te geven naar het uitvoerbare bestand van de service. Vervolgens kunt u Services Control Manager gebruiken om uw service te starten, stoppen, onderbreken, hervatten en configureren. U kunt ook veel van deze dezelfde taken uitvoeren in het knooppunt Services in Server Explorer of met behulp van de ServiceController klasse.
Servicetoepassingen versus andere Visual Studio-toepassingen
Servicetoepassingen werken op verschillende manieren anders dan veel andere projecttypen:
Het gecompileerde uitvoerbare bestand dat door een servicetoepassingsproject wordt gemaakt, moet op de server worden geïnstalleerd voordat het project op een zinvolle manier kan functioneren. U kunt geen fouten opsporen of een servicetoepassing uitvoeren door op F5 of F11 te drukken; u kunt een service niet direct uitvoeren of de code ervan instappen. In plaats daarvan moet u uw service installeren en starten en vervolgens een foutopsporingsprogramma toevoegen aan het proces van de service. Zie Procedures voor meer informatie: Fouten opsporen in Windows-servicetoepassingen.
In tegenstelling tot sommige typen projecten moet u installatieonderdelen maken voor servicetoepassingen. De installatieonderdelen installeren en registreren de service op de server en maken een vermelding voor uw service met Windows Services Control Manager. Zie Instructies voor meer informatie : Installatieprogramma's toevoegen aan uw servicetoepassing.
De
Main
methode voor uw servicetoepassing moet de opdracht Uitvoeren uitgeven voor de services die uw project bevat. DeRun
methode laadt de services in Services Control Manager op de juiste server. Als u de Windows Services-projectsjabloon gebruikt, wordt deze methode automatisch voor u geschreven. Houd er rekening mee dat het laden van een service niet hetzelfde is als het starten van de service. Zie 'Levensduur van service' hieronder voor meer informatie.Windows-servicetoepassingen worden uitgevoerd in een ander vensterstation dan het interactieve station van de aangemelde gebruiker. Een vensterstation is een beveiligd object dat een Klembord, een set globale atomen en een groep bureaubladobjecten bevat. Omdat het station van de Windows-service geen interactief station is, worden dialoogvensters die vanuit een Windows-servicetoepassing worden gegenereerd, niet weergegeven en kan ervoor zorgen dat uw programma niet meer reageert. Op dezelfde manier moeten foutberichten worden vastgelegd in het Windows-gebeurtenislogboek in plaats van gegenereerd in de gebruikersinterface.
De Windows-serviceklassen die worden ondersteund door .NET Framework bieden geen ondersteuning voor interactie met interactieve stations, dat wil gezegd de aangemelde gebruiker. Het .NET Framework bevat ook geen klassen die stations en bureaubladen vertegenwoordigen. Als uw Windows-service moet communiceren met andere stations, moet u toegang krijgen tot de niet-beheerde Windows-API. Zie de Windows SDK-documentatie voor meer informatie.
De interactie van de Windows-service met de gebruiker of andere stations moet zorgvuldig zijn ontworpen om scenario's op te nemen, zoals er geen aangemelde gebruiker is of de gebruiker met een onverwachte set bureaubladobjecten. In sommige gevallen is het mogelijk beter om een Windows-toepassing te schrijven die wordt uitgevoerd onder het beheer van de gebruiker.
Windows-servicetoepassingen worden uitgevoerd in hun eigen beveiligingscontext en worden gestart voordat de gebruiker zich aanmeldt bij de Windows-computer waarop ze zijn geïnstalleerd. U moet zorgvuldig plannen binnen welk gebruikersaccount de service moet worden uitgevoerd; een service die wordt uitgevoerd onder het systeemaccount heeft meer machtigingen en bevoegdheden dan een gebruikersaccount.
Levensduur van service
Een service doorloopt in zijn levensduur verschillende interne statussen. Eerst wordt de service geïnstalleerd op het systeem waarop deze wordt uitgevoerd. Met dit proces worden de installatieprogramma's voor het serviceproject uitgevoerd en wordt de service voor die computer in Services Control Manager geladen. Services Control Manager is het centrale hulpprogramma van Windows voor het beheren van services.
Nadat de service is geladen, moet deze worden gestart. Door de service te starten, kan deze functioneren. U kunt een service starten vanuit Services Control Manager, Vanuit Server Explorer of vanuit code door de methode aan te Start roepen. De Start methode geeft de verwerking door aan de methode van OnStart de toepassing en verwerkt alle code die u daar hebt gedefinieerd.
Een actieve service kan voor onbepaalde tijd bestaan totdat deze is gestopt of onderbroken of totdat de computer wordt afgesloten. Een service kan bestaan in een van de volgende drie basisstatussen: Running, Pausedof Stopped. De service kan ook de status rapporteren van een opdracht die in behandeling is: ContinuePending, PausePending, StartPendingof StopPending. Deze statussen geven aan dat er een opdracht is uitgegeven, zoals een opdracht om een actieve service te onderbreken, maar nog niet is uitgevoerd. U kunt een Status query uitvoeren om te bepalen in welke status een service zich bevindt of om WaitForStatus een actie uit te voeren wanneer een van deze statussen optreedt.
U kunt een service onderbreken, stoppen of hervatten vanuit Services Control Manager, serververkenner of door methoden in code aan te roepen. Elk van deze acties kan een bijbehorende procedure aanroepen in de service (OnStop, OnPauseof OnContinue), waarin u aanvullende verwerking kunt definiëren die moet worden uitgevoerd wanneer de status van de service verandert.
Typen services
Er zijn twee typen services die u in Visual Studio kunt maken met behulp van .NET Framework. Aan services die de enige service in een proces zijn, wordt het type Win32OwnProcesstoegewezen. Aan services die een proces delen met een andere service, wordt het type Win32ShareProcesstoegewezen. U kunt het servicetype ophalen door een query uit te voeren op de ServiceType eigenschap.
Soms ziet u andere servicetypen als u een query uitvoert op bestaande services die niet zijn gemaakt in Visual Studio. Zie voor meer informatie hierover de ServiceType.
Services en het ServiceController-onderdeel
Het ServiceController onderdeel wordt gebruikt om verbinding te maken met een geïnstalleerde service en de status ervan te manipuleren. Met behulp van een ServiceController onderdeel kunt u een service starten en stoppen, de werking ervan onderbreken en doorgaan en aangepaste opdrachten naar een service verzenden. U hoeft echter geen onderdeel te gebruiken ServiceController wanneer u een servicetoepassing maakt. In de meeste gevallen moet uw ServiceController onderdeel zelfs bestaan in een afzonderlijke toepassing van de Windows-servicetoepassing die uw service definieert.
Zie ServiceController voor meer informatie.
Vereisten
Services moeten worden gemaakt in een Windows Service-toepassingsproject of een ander .NET Framework-project dat een .exe-bestand maakt bij het maken en overnemen van de ServiceBase klasse.
Projecten met Windows-services moeten installatieonderdelen voor het project en de bijbehorende services hebben. Dit kan eenvoudig worden bereikt vanuit het venster Eigenschappen . Zie Instructies voor meer informatie : Installatieprogramma's toevoegen aan uw servicetoepassing.
Zie ook
- Windows-servicetoepassingen
- Architectuur voor servicetoepassingsprogrammering
- Procedure: Windows Services maken
- Instructies: Services installeren en verwijderen
- Procedure: Services starten
- Procedure: Fouten opsporen in Windows-servicetoepassingen
- Overzicht: Een Windows-servicetoepassing maken in componentontwerper
- Procedure: Installatieprogramma's toevoegen aan uw servicetoepassing