Come creare un servizio Windows

A volte hai bisogno di un'app o di uno script per continuare a funzionare indipendentemente dal fatto che tu abbia effettuato l'accesso al tuo computer o meno. Forse è uno script di PowerShell per monitorare le porte(PowerShell script to monitor ports) o un server Web che ospita una pagina sulla rete domestica(web server hosting a page on your home network) .

Il punto è che se vuoi che un processo, uno script o un programma venga eseguito finché il computer è acceso, dovrai creare un servizio Windows(Windows Service) .

Di cosa ho bisogno per creare un servizio Windows?(What Do I Need to Create a Windows Service?)

Per creare un servizio Windows in Windows 10 , ci sono alcuni prerequisiti: 

  • Accesso amministratore(Administrator) al computer
  • Qualcosa da eseguire come servizio ( PowerShell Script , programma, ecc.)
  • Non-Sucking Service Manager ( NSSM ) installato

Che cos'è il gestore del servizio non aspirante?(What Is the Non-Sucking Service Manager?)

Sì, non puoi rilasciare un nome del genere senza spiegarlo. Certo il nome è sfortunato, eppure è accurato. Il Non-Sucking Service Manager ( NSSM ) è probabilmente il modo più semplice per creare un servizio Windows altamente affidabile e configurabile. Inoltre, è un software gratuito e open source(Open Source Software) (OSS).

NSSM può essere utilizzato tramite il prompt dei comandi di Windows(Windows Command Prompt) o un'interfaccia utente grafica ( GUI ). Ciò significa che chiunque può usarlo. NSSM può essere utilizzato su qualsiasi versione di Windows che risale a Windows 2000 incluso . Esistono versioni a 32 bit e 64 bit . (32-bit and 64-bit)Se stai utilizzando un computer a 64 bit, prova prima quella versione. Se non funziona, torna alla versione a 32 bit. 

È possibile scaricare NSSM dal sito Web(download NSSM from the website) , clonare NSSM da Git(clone NSSM from Git) o installare NSSM con Chocolatey(install NSSM with Chocolatey) . Chocolatey è un gestore di pacchetti per Windows(Chocolatey is a package manager for Windows) . I metodi di installazione(Installation) variano a seconda del percorso che prendi. Si prega(Please) di consultare le istruzioni di NSSM . Per il nostro esempio, stiamo scaricando dal sito Web NSSM e installandolo in C:\WINDOWS\system32 .

Crea un servizio Windows con NSSM(Create a Windows Service With NSSM)

Per questo esempio, creeremo un servizio da uno script di PowerShell(PowerShell script) per registrare la percentuale di carico medio della CPU(CPU average load percentage)

  1. Copia e salva questo script come log-CPULoadPercentage.ps1 in una posizione a cui è improbabile che nessun altro possa accedere. Prova a creare la directory C:/Scripts e a salvarla lì. Inoltre, crea una cartella in Script(Scripts) chiamata Logs . Si noti che il percorso dello script è C:/Scripts/log-CPULoadPercentage.ps1 . Ne avrai bisogno più tardi.

Nota(Note) : tutte le righe sottostanti seguite dal simbolo # sono commenti e non influiranno sullo 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. Questo può essere fatto nel prompt dei comandi di Windows(Windows Command Prompt) o in PowerShell. Aprilo come amministratore(Open it as Administrator) .
  2. Immettere il comando nssm install logCPUAvg ed eseguirlo. Si aprirà la finestra del programma di installazione del servizio NSSM(NSSM service installer) .

  1. Fare clic(Click) sul pulsante con i puntini di sospensione accanto al campo Percorso(Path:) :, passare a powershell.exe che si trova normalmente in C:\Windows\System32\ . Seleziona powershell.exe. I campi Percorso:(Path:) e Directory di avvio:(Startup directory:) verranno compilati automaticamente.

  1. Immettere quanto segue nel campo Argomenti(Arguments:) : -ExecutionPolicy Bypass -NoProfile -File “C:\PathToScript\get-Script.ps1” , dove l'ultima parte è il percorso dello script   PowerShell e il nome dello script.(PowerShell)

  1. Seleziona la scheda Dettagli(Details) . Inserisci ciò che desideri che il servizio venga visualizzato come in Gestione servizi di (Services)Windows nel (Windows) Nome visualizzato:(Display name: ) campo. Quindi, inserisci ciò che fa nel campo Descrizione :. (Description:)Il tipo di avvio:(Startup type: ) può essere impostato su Automatico(Automatic) , Automatico (Avvio ritardato)(Automatic (Delayed Start)) , Manuale(Manual) o Disabilitato(Disabled) . Per questo esercizio, Automatico(Automatic) va bene.

  1. Seleziona la scheda Accedi . (Log on )Seleziona Questo account(This account) : pulsante di opzione e inserisci l'account e la password con cui verrà eseguito il servizio. Dovrai scegliere un account con cui verrà eseguito il servizio. Idealmente, avrai un account Windows creato solo per eseguire questo servizio. Le autorizzazioni di questo account dovrebbero essere limitate solo a ciò che il servizio deve fare. Puoi scegliere l' account di sistema locale(Local System account) , ma non è consigliato per motivi di sicurezza.

Ci sono molte altre schede che possono essere utilizzate per personalizzare il servizio. Per questo esercizio, sono sufficienti i valori predefiniti in tali schede. Seleziona il pulsante Installa servizio(Install service ) .

  1. Quando il servizio è installato, vedrai il Service “logCPUAvg” installed successfully! finestra. Selezionare OK per chiuderlo. Questo conclude l'installazione.

  1. Apri Gestione servizi(Windows Services Manager ) di Windows e assicurati che il servizio sia presente.

  1. Esegui(Run) il servizio per assicurarti che venga eseguito.

  1. Per verificare che questo servizio sia in esecuzione, utilizzare Esplora file(File Explorer ) per accedere alla posizione in cui si suppone che il registro venga salvato per vedere se esiste.

nssm-check-log.png

Rimozione di un servizio Windows con NSSM(Removing a Windows Service With NSSM)

Forse non è più necessario monitorare il carico della CPU(monitor your CPU) , quindi vorresti sbarazzarti del servizio. Fortunatamente, NSSM lo rende facile. 

  1. In Gestione servizi(Windows Services Manager) di Windows , interrompere il servizio. A tale scopo, seleziona il servizio Registra carico medio CPU(Log CPU Average Load ) , quindi seleziona il pulsante quadrato di arresto nella barra degli strumenti o il collegamento Arresta il servizio(Stop the service) sul lato sinistro.

  1. Apri il prompt dei comandi di Windows(Windows Command Prompt ) o PowerShell come amministratore.
  2. Immettere il comando nssm remove logCPUAvg ed eseguire il comando. 

  1. NSSM ti chiederà di confermare. Seleziona (Yes) .

  1. Quando il servizio viene rimosso, vedrai il Service “logCPUAvg” removed successfully! Conferma. Seleziona OK e il gioco è fatto.

È tutto. È una buona idea controllare il gestore dei servizi per assicurarsi che il servizio non sia più presente. Se vedi ancora il servizio, potrebbe essere necessario aggiornare lo schermo e dovrebbe essere sparito.

I servizi sono un ottimo modo per eseguire app o script che devono essere eseguiti continuamente, riavviarsi se non riescono o necessitano di privilegi diversi dall'utente corrente. Se non hai bisogno della tua app o dello script per fare tutte queste cose, considera invece l' utilizzo di un'attività pianificata(using a Scheduled Task) .



About the author

Sono un ingegnere del software con oltre 10 anni di esperienza nel lavoro su Apple iOS e dispositivi edge. La mia esperienza nell'ingegneria hardware mi ha appassionato nell'assicurarmi che i dispositivi dei nostri clienti siano il più affidabili e fluidi possibile. Ho scritto codice negli ultimi anni e ho imparato a usare Git, Vim e Node.js.



Related posts