Hur man skapar en Windows-tjänst

Ibland behöver du en app eller ett skript för att fortsätta köra oavsett om du är inloggad på din dator eller inte. Kanske är det ett PowerShell-skript för att övervaka portar(PowerShell script to monitor ports) eller en webbserver som är värd för en sida i ditt hemnätverk(web server hosting a page on your home network) .

Poängen är att om du vill att en process, ett skript eller ett program ska köras så länge som datorn är på, måste du skapa en Windows-tjänst(Windows Service) .

Vad behöver jag för att skapa en Windows-tjänst?(What Do I Need to Create a Windows Service?)

För att skapa en Windows -tjänst i Windows 10 finns det några förutsättningar: 

  • Administratörsåtkomst(Administrator) på datorn
  • Något att köra som en tjänst ( PowerShell-skript(PowerShell Script) , program, etc.)
  • Non-Sucking Service Manager ( NSSM ) installerad

Vad är den icke-sugande tjänstechefen?(What Is the Non-Sucking Service Manager?)

Ja, man kan inte släppa ett sånt namn utan att förklara det. Visst är namnet olyckligt, men det är korrekt. Non-Sucking Service Manager ( NSSM ) är utan tvekan det enklaste sättet att skapa en Windows -tjänst som är både mycket pålitlig och konfigurerbar. Dessutom är det gratis och öppen källkod(Open Source Software) (OSS).

NSSM kan användas via Windows Command Prompt eller ett grafiskt användargränssnitt ( GUI ). Det betyder att vem som helst kan använda den. NSSM kan användas på alla versioner av Windows som går tillbaka till och inklusive Windows 2000 . Det finns 32-bitars och 64-bitars(32-bit and 64-bit) versioner. Om du använder en 64-bitars dator, prova den versionen först. Om det inte fungerar, fall tillbaka till 32-bitarsversionen. 

Du kan ladda ner NSSM från webbplatsen(download NSSM from the website) , klona NSSM från Git(clone NSSM from Git) eller installera NSSM med Chocolatey(install NSSM with Chocolatey) . Chocolatey är en pakethanterare för Windows(Chocolatey is a package manager for Windows) . Installationsmetoderna(Installation) varierar beroende på vilken väg du tar. Se NSSM (Please):(NSSM) s instruktioner. För vårt exempel laddar vi ner från NSSM- webbplatsen och installerar den i C:\WINDOWS\system32 .

Skapa en Windows-tjänst med NSSM(Create a Windows Service With NSSM)

I det här exemplet skapar vi en tjänst av ett PowerShell-skript(PowerShell script) för att logga CPU-genomsnittlig belastningsprocent(CPU average load percentage)

  1. Kopiera och spara detta skript som log-CPULoadPercentage.ps1 till en plats som sannolikt inte kommer åt någon annan. Försök att skapa katalogen C:/Scripts och lagra den där. Skapa också en mapp i skript(Scripts) som heter Logs . Observera att sökvägen till skriptet är C:/Scripts/log-CPULoadPercentage.ps1 . Du kommer att behöva det senare.

Obs!(Note) Alla rader nedan följt av #-symbolen är kommentarer och påverkar inte skriptet.

CLS #Optional. I like to use this to clear the terminal when testing.

#Make sure you have a folder called Logs in the same directory as this script
#The log is where the records will be stored.
Start-Transcript -Path "$PSScriptRoot\Logs\log-CPULoadPercentage-$(get-date -f yyyy-MM-dd).txt" -Append

#While loop keeps it running until manually stopped
While ($True){
     #Creates a timestamp to know when the measurement was taken
     $timeStamp = get-date -f yyyy-MM-h:mm:ss

     #Gets the average load percentage at that time, then waits 5 seconds to do it again.
     $cpuLoadPercent = Get-CimInstance win32_processor | Measure-Object -Property LoadPercentage -Average | Select-Object Average;Start-Sleep -Seconds 5

     #Isolates just the average so there isn't a weird @{Average=13} string
     $cpuLoadPercent = $cpuLoadPercent.Average

     #writes results to screen, or in this case to the log
     Write-Host "$timeStamp CPU Load Percentage $cpuLoadPercent"
}

Stop-Transcript
  1. Detta kan göras antingen i Windows Command Prompt eller PowerShell. Öppna den som administratör(Open it as Administrator) .
  2. Ange kommandot nssm install logCPUAvg och kör det. NSSM -tjänstens installationsfönster(NSSM service installer) öppnas.

  1. Klicka(Click) på ellipsknappen bredvid fältet Sökväg(Path:) :, navigera till powershell.exe som normalt finns på C:\Windows\System32\ . Välj powershell.exe. Fälten Path: och Startup directory: kommer att fyllas i automatiskt.

  1. Ange följande i fältet Argument : (Arguments:)-ExecutionPolicy Bypass -NoProfile -File “C:\PathToScript\get-Script.ps1” , där den sista delen är sökvägen till ditt PowerShell - skript och skriptnamnet.  

  1. Välj fliken Detaljer . (Details)Ange vad du vill att tjänsten ska visas som i Windows Services - hanteraren i fältet Visningsnamn :. (Display name: )Ange sedan vad den gör i fältet Beskrivning :. (Description:)Starttyp :(Startup type: ) kan ställas in som Automatisk(Automatic) , Automatisk (Fördröjd Start)(Automatic (Delayed Start)) , Manuell(Manual) eller Inaktiverad(Disabled) . För denna övning är Automatic bra.

  1. Välj fliken Logga(Log on ) in . Välj alternativet Detta konto(This account) : och ange kontot och lösenordet som tjänsten ska köras som. Du måste välja ett konto som tjänsten ska köras under. Helst har du ett Windows -konto skapat bara för att köra den här tjänsten. Detta kontos behörigheter bör begränsas till endast vad tjänsten behöver göra. Du kan välja det lokala systemkontot(Local System account) , men det rekommenderas inte av säkerhetsskäl.

Det finns flera andra flikar som kan användas för att anpassa tjänsten. För den här övningen är standardvärdena i dessa flikar tillräckliga. Välj knappen Installera tjänst .(Install service )

  1. När tjänsten är installerad kommer du att se Service “logCPUAvg” installed successfully! fönster. Välj OK för att stänga den. Det avslutar installationen.

  1. Öppna Windows Services Manager och se till att tjänsten finns där.

  1. Kör(Run) tjänsten för att säkerställa att den kommer att köras.

  1. För att verifiera att den här tjänsten körs, använd Filutforskaren(File Explorer ) för att navigera till var loggen ska sparas för att se om den finns.

nssm-check-log.png

Ta bort en Windows-tjänst med NSSM(Removing a Windows Service With NSSM)

Kanske behöver du inte övervaka din CPU-(monitor your CPU) belastning längre, så du skulle vilja bli av med tjänsten. Lyckligtvis gör NSSM det enkelt. 

  1. Stoppa tjänsten i Windows Services Manager . Gör detta genom att välja tjänsten Log CPU Average Load och sedan antingen välja den fyrkantiga stoppknappen i verktygsfältet eller länken Stoppa tjänsten(Stop the service) på vänster sida.

  1. Öppna antingen Windows Command Prompt eller PowerShell som administratör.
  2. Ange kommandot nssm remove logCPUAvg och kör kommandot. 

  1. NSSM kommer att be dig bekräfta. Välj Ja(Yes) .

  1. När tjänsten har tagits bort ser du att Service “logCPUAvg” removed successfully! Bekräftelse. Välj OK och du är klar.

Det är allt. Det är en bra idé att kontrollera tjänstechefen för att säkerställa att tjänsten inte längre finns där. Om du fortfarande ser tjänsten kan du behöva uppdatera skärmen och den borde vara borta.

Tjänster är ett utmärkt sätt att köra appar eller skript som måste köras hela tiden, starta om sig själva om de misslyckas eller behöver andra privilegier än den nuvarande användaren. Om du inte behöver din app eller skript för att göra alla dessa saker, överväg att använda en schemalagd uppgift(using a Scheduled Task) istället.



About the author

Jag är en erfaren Windows 10 och 11/10 expert, med erfarenhet av både webbläsare och smartphone-appar. Jag har varit mjukvaruingenjör i över 15 år och har arbetat med ett antal stora namnföretag, inklusive Microsoft, Google, Apple, Ubisoft med flera. Jag har också undervisat i Windows 10/11-utveckling på högskolenivå.



Related posts