Een Windows-service maken

Soms heb je een app of script nodig om te kunnen blijven werken, of je nu op je computer bent ingelogd of niet. Misschien is het een PowerShell-script om poorten te bewaken(PowerShell script to monitor ports) of een webserver die een pagina op uw thuisnetwerk host(web server hosting a page on your home network) .

Het punt is dat als je een proces, script of programma wilt laten draaien zolang de computer aan staat, je een Windows Service moet maken .

Wat heb ik nodig om een ​​Windows-service te maken?(What Do I Need to Create a Windows Service?)

Om een ​​Windows -service in Windows 10 te maken , zijn er een paar vereisten: 

  • Beheerderstoegang(Administrator) op de computer
  • Iets om als een service uit te voeren ( PowerShell Script , programma, enz.)
  • Non-Sucking Service Manager ( NSSM ) geïnstalleerd

Wat is de niet-zuigende servicemanager?(What Is the Non-Sucking Service Manager?)

Ja, zo'n naam kun je niet laten vallen zonder het uit te leggen. Natuurlijk is de naam ongelukkig, maar het is juist. De Non-Sucking Service Manager ( NSSM ) is waarschijnlijk de gemakkelijkste manier om een ​​Windows -service te creëren die zowel zeer betrouwbaar als configureerbaar is. Bovendien is het gratis en Open Source Software (OSS).

NSSM kan worden gebruikt via de Windows-opdrachtprompt(Windows Command Prompt) of een grafische gebruikersinterface ( GUI ). Dit betekent dat iedereen het kan gebruiken. NSSM kan worden gebruikt op elke versie van Windows die teruggaat tot en met Windows 2000 . Er zijn 32-bits en 64-bits(32-bit and 64-bit) versies. Als je een 64-bits computer gebruikt, probeer dan eerst die versie. Als het niet werkt, val terug naar de 32-bits versie. 

Je kunt NSSM downloaden van de website(download NSSM from the website) , NSSM klonen van Git(clone NSSM from Git) , of NSSM installeren met Chocolatey(install NSSM with Chocolatey) . Chocolatey is een pakketbeheerder voor Windows(Chocolatey is a package manager for Windows) . De installatiemethoden(Installation) zijn afhankelijk van de route die u neemt. Raadpleeg de (Please)instructies(NSSM) van de NSSM . Voor ons voorbeeld downloaden we van de NSSM- website en installeren we deze in C:\WINDOWS\system32 .

Een Windows-service maken met NSSM(Create a Windows Service With NSSM)

Voor dit voorbeeld maken we een service op basis van een PowerShell-script om het gemiddelde CPU-belastingspercentage vast te leggen(CPU average load percentage)

  1. Kopieer dit script en sla het op als log-CPULoadPercentage.ps1 op een plaats waar waarschijnlijk niemand anders toegang toe heeft. Probeer de map C:/Scripts aan te maken en daar op te slaan. Maak ook een map in Scripts met de naam Logboeken(Logs) . Merk op dat het pad naar het script C:/Scripts/log-CPULoadPercentage.ps1 is . Dat heb je later nodig.

Opmerking(Note) : alle regels hieronder gevolgd door het #-symbool zijn opmerkingen en hebben geen invloed op het script.

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. Dit kan worden gedaan in de Windows-opdrachtprompt(Windows Command Prompt) of PowerShell. Open het als beheerder(Open it as Administrator) .
  2. Voer het commando nssm install logCPUAvg in(nssm install logCPUAvg) en voer het uit. Het NSSM-service-installatievenster(NSSM service installer) wordt geopend.

  1. Klik(Click) op de knop met de ellipsen naast het veld Pad:(Path:) en navigeer naar de powershell.exe die zich normaal gesproken op C:\Windows\System32\ bevindt . Selecteer powershell.exe. De velden Pad:(Path:) en Opstartmap:(Startup directory:) worden automatisch ingevuld.

  1. Voer het volgende in het veld Argumenten: in: (Arguments:)-ExecutionPolicy Bypass -NoProfile -File “C:\PathToScript\get-Script.ps1” , waarbij het laatste deel het pad naar uw PowerShell - script en de scriptnaam is.  

  1. Selecteer het tabblad Details . Voer in het veld Weergavenaam:(Display name: ) in hoe u wilt dat de service wordt weergegeven in de Windows Services - manager . Typ vervolgens wat het doet in het veld Beschrijving:. (Description:)Het opstarttype:(Startup type: ) kan worden ingesteld op Automatisch(Automatic) , Automatisch (uitgestelde start)(Automatic (Delayed Start)) , Handmatig(Manual) of Uitgeschakeld(Disabled) . Voor deze oefening is Automatisch(Automatic) goed.

  1. Selecteer het tabblad Aanmelden . (Log on )Selecteer Dit account(This account) : keuzerondje en voer het account en wachtwoord in waarmee de service wordt uitgevoerd. U moet een account kiezen waaronder de service wordt uitgevoerd. In het ideale geval hebt u een Windows -account gemaakt speciaal voor het uitvoeren van deze service. De machtigingen van dit account moeten worden beperkt tot wat de service moet doen. U kunt het Local System-account kiezen , maar dit wordt om veiligheidsredenen niet aanbevolen.

Er zijn verschillende andere tabbladen die kunnen worden gebruikt om de service aan te passen. Voor deze oefening zijn de standaardwaarden in die tabbladen voldoende. Selecteer de knop Service installeren(Install service ) .

  1. Wanneer de service is geïnstalleerd, ziet u dat de Service “logCPUAvg” installed successfully! raam. Selecteer OK om het te sluiten. Dat besluit de installatie.

  1. Open Windows Services Manager en zorg ervoor dat de service aanwezig is.

  1. Voer(Run) de service uit om ervoor te zorgen dat deze wordt uitgevoerd.

  1. Om te controleren of deze service actief is, gebruikt u Verkenner(File Explorer ) om te navigeren naar waar het logboek moet worden opgeslagen om te zien of het bestaat.

nssm-check-log.png

Een Windows-service verwijderen met NSSM(Removing a Windows Service With NSSM)

Misschien hoef je je CPU-(monitor your CPU) belasting niet meer in de gaten te houden, en wil je dus graag van de service af. Gelukkig maakt NSSM dat gemakkelijk. 

  1. Stop de service in Windows Services Manager . Doe dit door de service Log CPU Average Load te selecteren en vervolgens ofwel de vierkante stopknop in de werkbalk te selecteren of de link Service stoppen(Stop the service) aan de linkerkant.

  1. Open de Windows-opdrachtprompt(Windows Command Prompt ) of PowerShell als beheerder.
  2. Voer de opdracht nssm remove logCPUAvg in(nssm remove logCPUAvg) en voer de opdracht uit. 

  1. NSSM zal u vragen om te bevestigen. Selecteer Ja(Yes) .

  1. Wanneer de service is verwijderd, ziet u dat de Service “logCPUAvg” removed successfully! Bevestiging. Selecteer OK en je bent klaar.

Dat is alles. Het is een goed idee om de servicemanager te controleren om er zeker van te zijn dat de service er niet meer is. Als u de service nog steeds ziet, moet u mogelijk het scherm vernieuwen en zou het verdwenen moeten zijn.

Services zijn een geweldige manier om apps of scripts uit te voeren die de hele tijd moeten worden uitgevoerd, zichzelf opnieuw op te starten als ze niet werken of andere rechten nodig hebben dan de huidige gebruiker. Als je je app of script niet nodig hebt om al deze dingen te doen, overweeg dan om een ​​geplande taak(using a Scheduled Task) te gebruiken.



About the author

Ik ben software engineer en heb ervaring met zowel Microsoft Office als de Chrome browser. Ik heb kennis van vele aspecten van webontwikkeling, inclusief maar niet beperkt tot: HTML, CSS, JavaScript, jQuery en React. Door mijn interesse in het werken met technologie ben ik ook bekend met verschillende platformen (Windows, Mac, iOS) en begrijp ik hoe ze werken.



Related posts