Share via


Introduktion till Windows-tjänstprogram

Kommentar

Den här artikeln gäller inte för värdbaserade tjänster i .NET. Det senaste innehållet i Windows-tjänster med hjälp av Microsoft.Extensions.Hosting.BackgroundService och arbetstjänstmallen finns i:

Med Microsoft Windows-tjänster, som tidigare kallades NT-tjänster, kan du skapa tidskrävande körbara program som körs i sina egna Windows-sessioner. Dessa tjänster kan startas automatiskt när datorn startar, kan pausas och startas om och inte visa något användargränssnitt. Dessa funktioner gör tjänster idealiska för användning på en server eller när du behöver långvariga funktioner som inte stör andra användare som arbetar på samma dator. Du kan också köra tjänster i säkerhetskontexten för ett specifikt användarkonto som skiljer sig från den inloggade användaren eller standarddatorkontot. Mer information om tjänster och Windows-sessioner finns i Windows SDK-dokumentationen.

Du kan enkelt skapa tjänster genom att skapa ett program som är installerat som en tjänst. Anta till exempel att du vill övervaka prestandaräknardata och reagera på tröskelvärden. Du kan skriva ett Windows Service-program som lyssnar på prestandaräknardata, distribuerar programmet och börjar samla in och analysera data.

Du skapar din tjänst som ett Microsoft Visual Studio-projekt och definierar kod i den som styr vilka kommandon som kan skickas till tjänsten och vilka åtgärder som ska vidtas när dessa kommandon tas emot. Kommandon som kan skickas till en tjänst är att starta, pausa, återuppta och stoppa tjänsten. du kan också köra anpassade kommandon.

När du har skapat och skapat programmet kan du installera det genom att köra kommandoradsverktyget InstallUtil.exe och skicka sökvägen till tjänstens körbara fil. Du kan sedan använda Services Control Manager för att starta, stoppa, pausa, återuppta och konfigurera tjänsten. Du kan också utföra många av dessa uppgifter i noden Tjänster i ServerUtforskaren eller med hjälp ServiceController av klassen .

Tjänstprogram jämfört med andra Visual Studio-program

Tjänstprogram fungerar annorlunda än många andra projekttyper på flera sätt:

  • Den kompilerade körbara fil som ett tjänstprogramprojekt skapar måste installeras på servern innan projektet kan fungera på ett meningsfullt sätt. Du kan inte felsöka eller köra ett tjänstprogram genom att trycka på F5 eller F11. Du kan inte omedelbart köra en tjänst eller gå in i dess kod. I stället måste du installera och starta tjänsten och sedan koppla ett felsökningsprogram till tjänstens process. Mer information finns i Så här felsöker du Windows Service-program.

  • Till skillnad från vissa typer av projekt måste du skapa installationskomponenter för tjänstprogram. Installationskomponenterna installerar och registrerar tjänsten på servern och skapar en post för tjänsten med Windows Services Control Manager. Mer information finns i Så här lägger du till installationsprogram i ditt tjänstprogram.

  • Metoden Main för tjänstprogrammet måste utfärda kommandot Kör för de tjänster som projektet innehåller. Metoden Run läser in tjänsterna i Services Control Manager på rätt server. Om du använder Windows Services-projektmallen skrivs den här metoden automatiskt åt dig. Observera att inläsning av en tjänst inte är samma sak som att starta tjänsten. Mer information finns i "Tjänstlivslängd" nedan.

  • Windows Service-program körs i en annan fönsterstation än den interaktiva stationen för den inloggade användaren. En fönsterstation är ett säkert objekt som innehåller ett Urklipp, en uppsättning globala atomer och en grupp skrivbordsobjekt. Eftersom windows-tjänstens station inte är en interaktiv station visas inte dialogrutor från ett Windows-tjänstprogram och kan leda till att programmet slutar svara. På samma sätt bör felmeddelanden loggas i Windows-händelseloggen i stället för att genereras i användargränssnittet.

    De Windows-tjänstklasser som stöds av .NET Framework har inte stöd för interaktion med interaktiva stationer, dvs. den inloggade användaren. .NET Framework innehåller inte heller klasser som representerar stationer och stationära datorer. Om din Windows-tjänst måste interagera med andra stationer måste du komma åt det ohanterade Windows-API:et. Mer information finns i Windows SDK-dokumentationen.

    Interaktionen mellan Windows-tjänsten och användaren eller andra stationer måste vara noggrant utformad för att inkludera scenarier som att det inte finns någon inloggad användare eller att användaren har en oväntad uppsättning skrivbordsobjekt. I vissa fall kan det vara lämpligare att skriva ett Windows-program som körs under användarens kontroll.

  • Windows-tjänstprogram körs i sin egen säkerhetskontext och startas innan användaren loggar in på den Windows-dator där de är installerade. Du bör planera noggrant vilket användarkonto som ska köra tjänsten inom; en tjänst som körs under systemkontot har fler behörigheter och behörigheter än ett användarkonto.

Tjänstlivslängd

En tjänst genomgår flera interna tillstånd under sin livslängd. Först installeras tjänsten på det system som den ska köras på. Den här processen kör installationsprogrammet för tjänstprojektet och läser in tjänsten i Services Control Manager för den datorn. Services Control Manager är det centrala verktyget som tillhandahålls av Windows för att administrera tjänster.

När tjänsten har lästs in måste den startas. När tjänsten startas kan den börja fungera. Du kan starta en tjänst från Services Control Manager, från Server Explorer eller från kod genom att anropa Start metoden. Metoden Start skickar bearbetningen till programmets OnStart metod och bearbetar all kod som du har definierat där.

En tjänst som körs kan finnas i det här tillståndet på obestämd tid tills den antingen stoppas eller pausas eller tills datorn stängs av. En tjänst kan finnas i något av tre grundläggande tillstånd: Running, Pausedeller Stopped. Tjänsten kan också rapportera tillståndet för ett väntande kommando: ContinuePending, PausePending, StartPending, eller StopPending. Dessa statusar anger att ett kommando har utfärdats, till exempel ett kommando för att pausa en tjänst som körs, men inte har utförts ännu. Du kan fråga Status för att avgöra vilket tillstånd en tjänst befinner sig i eller använda WaitForStatus för att utföra en åtgärd när något av dessa tillstånd inträffar.

Du kan pausa, stoppa eller återuppta en tjänst från Services Control Manager, från Server Explorer eller genom att anropa metoder i kod. Var och en av dessa åtgärder kan anropa en associerad procedur i tjänsten (OnStop, OnPause, eller OnContinue), där du kan definiera ytterligare bearbetning som ska utföras när tjänsten ändras.

Typer av tjänster

Det finns två typer av tjänster som du kan skapa i Visual Studio med hjälp av .NET Framework. Tjänster som är den enda tjänsten i en process tilldelas typen Win32OwnProcess. Tjänster som delar en process med en annan tjänst tilldelas typen Win32ShareProcess. Du kan hämta tjänsttypen genom att fråga egenskapen ServiceType .

Ibland kan du se andra tjänsttyper om du kör frågor mot befintliga tjänster som inte har skapats i Visual Studio. Mer information om dessa finns i ServiceType.

Tjänster och ServiceController-komponenten

Komponenten ServiceController används för att ansluta till en installerad tjänst och ändra dess tillstånd. Med hjälp av en ServiceController komponent kan du starta och stoppa en tjänst, pausa och fortsätta dess funktion och skicka anpassade kommandon till en tjänst. Du behöver dock inte använda en ServiceController komponent när du skapar ett tjänstprogram. I de flesta fall bör din ServiceController komponent faktiskt finnas i ett separat program från Windows-tjänstprogrammet som definierar din tjänst.

Mer information finns i ServiceController.

Krav

  • Tjänster måste skapas i ett Windows Service-programprojekt eller ett annat .NET Framework-aktiverat projekt som skapar en .exe-fil när den ServiceBase skapas och ärver från klassen.

  • Projekt som innehåller Windows-tjänster måste ha installationskomponenter för projektet och dess tjänster. Detta kan enkelt utföras från fönstret Egenskaper . Mer information finns i Så här lägger du till installationsprogram i ditt tjänstprogram.

Se även