Πώς να δημιουργήσετε μια υπηρεσία Windows

Μερικές φορές χρειάζεστε μια εφαρμογή ή ένα σενάριο για να συνεχίσετε να εκτελείτε είτε είστε συνδεδεμένοι στον υπολογιστή σας είτε όχι. Ίσως είναι ένα σενάριο PowerShell για την παρακολούθηση των θυρών(PowerShell script to monitor ports) ή ένας διακομιστής ιστού που φιλοξενεί μια σελίδα στο οικιακό σας δίκτυο(web server hosting a page on your home network) .

Το θέμα είναι ότι εάν θέλετε μια διαδικασία, ένα σενάριο ή ένα πρόγραμμα να εκτελείται όσο ο υπολογιστής είναι ενεργοποιημένος, θα πρέπει να δημιουργήσετε μια υπηρεσία Windows(Windows Service) .

Τι χρειάζομαι για να δημιουργήσω μια υπηρεσία Windows;(What Do I Need to Create a Windows Service?)

Για να δημιουργήσετε μια υπηρεσία Windows στα Windows 10 , υπάρχουν μερικές προϋποθέσεις: 

  • Πρόσβαση διαχειριστή(Administrator) στον υπολογιστή
  • Κάτι για εκτέλεση ως υπηρεσία ( PowerShell Script , πρόγραμμα κ.λπ.)
  • Εγκαταστάθηκε το Non-Sucking Service Manager ( NSSM ).

Τι είναι ο Υπεύθυνος Υπηρεσιών που δεν ρουφάει;(What Is the Non-Sucking Service Manager?)

Ναι, δεν μπορείτε να αφήσετε ένα τέτοιο όνομα χωρίς να το εξηγήσετε. Σίγουρα το όνομα είναι ατυχές, αλλά είναι ακριβές. Το Non-Sucking Service Manager ( NSSM ) είναι αναμφισβήτητα ο ευκολότερος τρόπος για να δημιουργήσετε μια υπηρεσία Windows που είναι ταυτόχρονα εξαιρετικά αξιόπιστη και διαμορφώσιμη. Επιπλέον, είναι δωρεάν και Λογισμικό Ανοικτού Κώδικα(Open Source Software) (OSS).

Το NSSM μπορεί να χρησιμοποιηθεί μέσω της γραμμής εντολών των Windows(Windows Command Prompt) ή μιας γραφικής διεπαφής χρήστη ( GUI ). Αυτό σημαίνει ότι ο καθένας μπορεί να το χρησιμοποιήσει. Το NSSM μπορεί να χρησιμοποιηθεί σε οποιαδήποτε έκδοση των Windows που επιστρέφει στα Windows 2000 και περιλαμβάνει . Υπάρχουν εκδόσεις 32-bit και 64-bit(32-bit and 64-bit) . Εάν χρησιμοποιείτε υπολογιστή 64-bit, δοκιμάστε πρώτα αυτήν την έκδοση. Εάν δεν λειτουργεί, επιστρέψτε στην έκδοση 32-bit. 

Μπορείτε να κάνετε λήψη του NSSM από τον ιστότοπο(download NSSM from the website) , να κλωνοποιήσετε το NSSM από το Git(clone NSSM from Git) ή να εγκαταστήσετε το NSSM με το Chocolatey(install NSSM with Chocolatey) . Το Chocolatey είναι ένας διαχειριστής πακέτων για Windows(Chocolatey is a package manager for Windows) . Οι μέθοδοι εγκατάστασης(Installation) θα διαφέρουν ανάλογα με τη διαδρομή που θα ακολουθήσετε. Συμβουλευτείτε τις (Please)οδηγίες(NSSM) του NSSM . Για το παράδειγμά μας, κάνουμε λήψη από τον ιστότοπο του NSSM και τον εγκαθιστούμε στο C:\WINDOWS\system32 .

Δημιουργήστε μια υπηρεσία Windows με NSSM(Create a Windows Service With NSSM)

Για αυτό το παράδειγμα, θα δημιουργήσουμε μια υπηρεσία από ένα σενάριο PowerShell(PowerShell script) για την καταγραφή του μέσου ποσοστού φόρτωσης της CPU(CPU average load percentage)

  1. Αντιγράψτε και αποθηκεύστε αυτό το σενάριο ως log-CPULoadPercentage.ps1 σε ένα μέρος που δεν είναι πιθανό να έχει πρόσβαση κάποιος άλλος. Δοκιμάστε να δημιουργήσετε τον κατάλογο C:/Scripts και να τον αποθηκεύσετε εκεί. Επίσης, δημιουργήστε έναν φάκελο στα Σενάρια(Scripts) που ονομάζεται Αρχεία καταγραφής(Logs) . Σημειώστε ότι η διαδρομή προς το σενάριο είναι C:/Scripts/log-CPULoadPercentage.ps1 . Θα το χρειαστείς αργότερα.

Σημείωση(Note) : Όλες οι γραμμές παρακάτω ακολουθούμενες από το σύμβολο # είναι σχόλια και δεν θα επηρεάσουν το σενάριο.

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. Αυτό μπορεί να γίνει είτε στη γραμμή εντολών των Windows(Windows Command Prompt) είτε στο PowerShell. Ανοίξτε το ως Διαχειριστής(Open it as Administrator) .
  2. Εισαγάγετε την εντολή nssm install logCPUAvg και εκτελέστε την. Θα ανοίξει το παράθυρο εγκατάστασης υπηρεσίας NSSM .(NSSM service installer)

  1. Κάντε κλικ(Click) στο κουμπί ελλείψεις δίπλα στο πεδίο Διαδρομή(Path:) :, μεταβείτε στο powershell.exe που βρίσκεται συνήθως στο C:\Windows\System32\ . Επιλέξτε powershell.exe. Τα πεδία Path: και Startup directory: θα συμπληρωθούν αυτόματα.

  1. Εισαγάγετε τα ακόλουθα στο πεδίο Arguments : - (Arguments:)-ExecutionPolicy Bypass -NoProfile -File “C:\PathToScript\get-Script.ps1” , όπου το τελευταίο μέρος είναι η διαδρομή προς το σενάριο   PowerShell και το όνομα του σεναρίου.(PowerShell)

  1. Επιλέξτε την καρτέλα Λεπτομέρειες . (Details)Εισαγάγετε αυτό που θέλετε να εμφανίζεται η υπηρεσία όπως στη Διαχείριση υπηρεσιών των (Services)Windows στο πεδίο Εμφανιζόμενο όνομα:. (Display name: )Στη συνέχεια, εισαγάγετε τι κάνει στο πεδίο Περιγραφή :. (Description:)Ο τύπος εκκίνησης:(Startup type: ) μπορεί να οριστεί ως Αυτόματη(Automatic) , Αυτόματη (Καθυστερημένη έναρξη)(Automatic (Delayed Start)) , Μη αυτόματη(Manual) ή Απενεργοποιημένη(Disabled) . Για αυτήν την άσκηση, το Automatic είναι καλό.

  1. Επιλέξτε την καρτέλα Σύνδεση . (Log on )Επιλέξτε Αυτός ο λογαριασμός(This account) : το κουμπί επιλογής και εισαγάγετε τον λογαριασμό και τον κωδικό πρόσβασης με τους οποίους θα εκτελείται η υπηρεσία. Θα χρειαστεί να επιλέξετε έναν λογαριασμό στον οποίο θα εκτελείται η υπηρεσία. Στην ιδανική περίπτωση, θα έχετε έναν λογαριασμό Windows που δημιουργείται μόνο για την εκτέλεση αυτής της υπηρεσίας. Τα δικαιώματα αυτού του λογαριασμού θα πρέπει να περιορίζονται μόνο σε αυτά που χρειάζεται να κάνει η υπηρεσία. Μπορείτε να επιλέξετε τον λογαριασμό τοπικού συστήματος(Local System account) , αλλά δεν συνιστάται για λόγους ασφαλείας.

Υπάρχουν πολλές άλλες καρτέλες που μπορούν να χρησιμοποιηθούν για την προσαρμογή της υπηρεσίας. Για αυτήν την άσκηση, οι προεπιλεγμένες τιμές σε αυτές τις καρτέλες είναι επαρκείς. Επιλέξτε το κουμπί Εγκατάσταση υπηρεσίας .(Install service )

  1. Όταν εγκατασταθεί η υπηρεσία, θα δείτε την Service “logCPUAvg” installed successfully! παράθυρο. Επιλέξτε ΟΚ(OK) για να το κλείσετε. Αυτό ολοκληρώνει την εγκατάσταση.

  1. Ανοίξτε το Windows Services Manager και βεβαιωθείτε ότι η υπηρεσία είναι εκεί.

  1. Εκτελέστε(Run) την υπηρεσία για να βεβαιωθείτε ότι θα εκτελεστεί.

  1. Για να επαληθεύσετε ότι αυτή η υπηρεσία εκτελείται, χρησιμοποιήστε την Εξερεύνηση αρχείων(File Explorer ) για να πλοηγηθείτε στο σημείο όπου υποτίθεται ότι θα αποθηκευτεί το αρχείο καταγραφής για να δείτε εάν υπάρχει.

nssm-check-log.png

Κατάργηση υπηρεσίας Windows με NSSM(Removing a Windows Service With NSSM)

Ίσως δεν χρειάζεται πλέον να παρακολουθείτε το φορτίο της CPU σας(monitor your CPU) , επομένως θα θέλατε να απαλλαγείτε από την υπηρεσία. Ευτυχώς, το NSSM το κάνει αυτό εύκολο. 

  1. Στη Διαχείριση υπηρεσιών των Windows(Windows Services Manager) , διακόψτε την υπηρεσία. Κάντε αυτό επιλέγοντας την υπηρεσία Log CPU Average Load και, στη συνέχεια, είτε επιλέγοντας το τετράγωνο κουμπί διακοπής στη γραμμή εργαλείων είτε το σύνδεσμο Stop the service στην αριστερή πλευρά.

  1. Ανοίξτε είτε τη γραμμή εντολών των Windows(Windows Command Prompt ) είτε το PowerShell ως διαχειριστής.
  2. Εισαγάγετε την εντολή nssm remove logCPUAvg και εκτελέστε την εντολή. 

  1. Το NSSM(NSSM) θα σας ζητήσει να το επιβεβαιώσετε. Επιλέξτε Ναι(Yes) .

  1. Όταν καταργηθεί η υπηρεσία, θα δείτε ότι η Service “logCPUAvg” removed successfully! Επιβεβαίωση. Επιλέξτε ΟΚ(OK) και τελειώσατε.

Αυτό είναι όλο. Είναι καλή ιδέα να ελέγξετε τον υπεύθυνο υπηρεσιών για να βεβαιωθείτε ότι η υπηρεσία δεν είναι πλέον εκεί. Εάν εξακολουθείτε να βλέπετε την υπηρεσία, ίσως χρειαστεί να ανανεώσετε την οθόνη και θα πρέπει να φύγει.

Οι υπηρεσίες είναι ένας πολύ καλός τρόπος για την εκτέλεση εφαρμογών ή σεναρίων που πρέπει να εκτελούνται συνεχώς, να κάνουν επανεκκίνηση εάν αποτύχουν ή χρειάζονται προνόμια διαφορετικά από τον τρέχοντα χρήστη. Εάν δεν χρειάζεστε την εφαρμογή ή το σενάριο για να κάνετε όλα αυτά τα πράγματα, σκεφτείτε να χρησιμοποιήσετε μια Προγραμματισμένη εργασία(using a Scheduled Task) .



About the author

Είμαι έμπειρος ειδικός στα windows 10 και 11/10, με εμπειρία τόσο σε προγράμματα περιήγησης όσο και σε εφαρμογές smartphone. Είμαι μηχανικός λογισμικού για περισσότερα από 15 χρόνια και έχω συνεργαστεί με μια σειρά από μεγάλες εταιρείες, όπως η Microsoft, η Google, η Apple, η Ubisoft και άλλες. Έχω διδάξει επίσης ανάπτυξη windows 10/11 σε επίπεδο κολεγίου.



Related posts