Jak stworzyć usługę Windows

Czasami potrzebujesz aplikacji lub skryptu, aby działały niezależnie od tego, czy jesteś zalogowany na komputerze, czy nie. Może to skrypt PowerShell do monitorowania portów(PowerShell script to monitor ports) lub serwer WWW hostujący stronę w Twojej sieci domowej(web server hosting a page on your home network) .

Chodzi o to, że jeśli chcesz, aby proces, skrypt lub program działał tak długo, jak komputer jest włączony, musisz utworzyć usługę Windows(Windows Service) .

Czego potrzebuję, aby utworzyć usługę Windows?(What Do I Need to Create a Windows Service?)

Aby utworzyć usługę Windows w (Windows)systemie Windows 10(Windows 10) , należy spełnić kilka wymagań wstępnych: 

  • Dostęp administratora(Administrator) na komputerze
  • Coś do uruchomienia jako usługa ( PowerShell Script , program itp.)
  • Zainstalowany Non-Sucking Service Manager ( NSSM )

Co to jest niessący menedżer usług?(What Is the Non-Sucking Service Manager?)

Tak, nie możesz porzucić takiego imienia bez wyjaśnienia. Jasne, że nazwa jest niefortunna, ale jest dokładna. Non-Sucking Service Manager ( NSSM ) to prawdopodobnie najłatwiejszy sposób na utworzenie usługi Windows , która jest zarówno wysoce niezawodna, jak i konfigurowalna. Ponadto jest to bezpłatne i otwarte oprogramowanie(Open Source Software) (OSS).

NSSM może być używany za pośrednictwem wiersza polecenia systemu Windows(Windows Command Prompt) lub graficznego interfejsu użytkownika ( GUI ). Oznacza to, że każdy może z niego korzystać. NSSM może być używany w dowolnej wersji systemu Windows , począwszy od systemu (Windows)Windows 2000 włącznie . Istnieją wersje 32-bitowe i 64-bitowe . (32-bit and 64-bit)Jeśli używasz komputera 64-bitowego, wypróbuj najpierw tę wersję. Jeśli to nie zadziała, wróć do wersji 32-bitowej. 

Możesz pobrać NSSM ze strony internetowej(download NSSM from the website) , sklonować NSSM z Git(clone NSSM from Git) lub zainstalować NSSM z Chocolatey(install NSSM with Chocolatey) . Chocolatey to menedżer pakietów dla systemu Windows(Chocolatey is a package manager for Windows) . Metody instalacji(Installation) będą się różnić w zależności od wybranej trasy. Proszę(Please) zapoznać się z instrukcjami NSSM . W naszym przykładzie pobieramy z witryny NSSM i instalujemy w C:\WINDOWS\system32 .

Utwórz usługę Windows za pomocą NSSM(Create a Windows Service With NSSM)

W tym przykładzie utworzymy usługę ze skryptu PowerShell(PowerShell script) do rejestrowania średniego procentu obciążenia procesora(CPU average load percentage)

  1. Skopiuj i zapisz ten skrypt jako log-CPULoadPercentage.ps1 w miejscu, do którego nikt inny nie będzie miał dostępu. Spróbuj utworzyć katalog C:/Scripts i tam go przechowywać. Ponadto utwórz folder w Skryptach(Scripts) o nazwie Dzienniki(Logs) . Zwróć uwagę, że ścieżka do skryptu to C:/Scripts/log-CPULoadPercentage.ps1 . Będziesz tego później potrzebować.

Uwaga(Note) : Wszystkie poniższe wiersze, po których następuje symbol #, są komentarzami i nie mają wpływu na skrypt.

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. Można to zrobić w wierszu polecenia systemu Windows(Windows Command Prompt) lub w PowerShell. Otwórz go jako Administrator(Open it as Administrator) .
  2. Wpisz polecenie nssm install logCPUAvg i uruchom je. Otworzy się okno instalatora usługi NSSM(NSSM service installer) .

  1. Kliknij(Click) przycisk wielokropka obok pola Ścieżka(Path:) :, przejdź do pliku powershell.exe(powershell.exe ) , który zwykle znajduje się w C:\Windows\System32\ . Wybierz powershell.exe. Pola Ścieżka:(Path:) i Katalog startowy:(Startup directory:) zostaną automatycznie wypełnione.

  1. Wprowadź następujące dane w polu Argumenty:(Arguments:) -ExecutionPolicy -ExecutionPolicy Bypass -NoProfile -File “C:\PathToScript\get-Script.ps1” , gdzie ostatnia część to ścieżka do skryptu PowerShell i nazwa skryptu.  

  1. Wybierz kartę Szczegóły(Details) . W polu Nazwa wyświetlana:(Display name: ) wpisz, co ma się wyświetlać, jak w Menedżerze usług (Services)systemu Windows(Windows) . Następnie wpisz, co robi w polu Opis(Description:) :. Typ uruchomienia:(Startup type: ) można ustawić jako Automatyczny(Automatic) , Automatyczny (opóźniony start)(Automatic (Delayed Start)) , Ręczny(Manual) lub Wyłączony(Disabled) . W tym ćwiczeniu dobrze sprawdza się automat(Automatic) .

  1. Wybierz kartę Logowanie(Log on ) . Wybierz To konto(This account) : przycisk radiowy i wprowadź konto i hasło, pod którym usługa będzie działać. Musisz wybrać konto, pod którym usługa będzie działać. W idealnym przypadku będziesz mieć konto Windows utworzone tylko do uruchamiania tej usługi. Uprawnienia tego konta powinny być ograniczone tylko do tego, co usługa musi zrobić. Możesz wybrać konto System lokalny(Local System account) , ale nie jest to zalecane ze względów bezpieczeństwa.

Istnieje kilka innych zakładek, których można użyć do dostosowania usługi. W tym ćwiczeniu wystarczające są wartości domyślne na tych kartach. Wybierz przycisk Zainstaluj usługę(Install service ) .

  1. Po zainstalowaniu Service “logCPUAvg” installed successfully! okno. Wybierz OK , aby go zamknąć. Na tym kończy się instalacja.

  1. Otwórz Menedżera usług systemu Windows(Windows Services Manager ) i upewnij się, że usługa tam jest.

  1. Uruchom(Run) usługę, aby upewnić się, że będzie działać.

  1. Aby sprawdzić, czy ta usługa jest uruchomiona, użyj Eksploratora plików(File Explorer ) , aby przejść do miejsca, w którym ma zostać zapisany dziennik, aby sprawdzić, czy istnieje.

nssm-check-log.png

Usuwanie usługi Windows za pomocą NSSM(Removing a Windows Service With NSSM)

Może nie musisz już monitorować(monitor your CPU) obciążenia procesora, więc chcesz pozbyć się usługi. Na szczęście NSSM to ułatwia. 

  1. W Menedżerze usług systemu Windows(Windows Services Manager) zatrzymaj usługę. Zrób to, wybierając usługę Log CPU Average Load , a następnie albo kwadratowy przycisk stop na pasku narzędzi, albo link (Log CPU Average Load )Stop the service po lewej stronie.

  1. Otwórz wiersz polecenia systemu Windows(Windows Command Prompt ) lub PowerShell jako administrator.
  2. Wpisz polecenie nssm remove logCPUAvg i wykonaj polecenie. 

  1. NSSM poprosi o potwierdzenie. Wybierz Tak(Yes) .

  1. Po usunięciu usługi Service “logCPUAvg” removed successfully! Potwierdzenie. Wybierz OK i gotowe.

To wszystko. Dobrym pomysłem jest sprawdzenie menedżera usług, aby upewnić się, że usługa już nie istnieje. Jeśli nadal widzisz usługę, może być konieczne odświeżenie ekranu i powinno zniknąć.

Usługi to świetny sposób na uruchamianie aplikacji lub skryptów, które muszą działać przez cały czas, uruchamiają się ponownie w przypadku awarii lub wymagają uprawnień innych niż obecny użytkownik. Jeśli nie potrzebujesz aplikacji lub skryptu do wykonywania wszystkich tych czynności, rozważ zamiast tego użycie zaplanowanego zadania .(using a Scheduled Task)



About the author

Jestem inżynierem Windows, ios, pdf, błędów, gadżetów z ponad 10-letnim doświadczeniem. Pracowałem nad wieloma wysokiej jakości aplikacjami i frameworkami Windows, takimi jak OneDrive dla Firm, Office 365 i nie tylko. Moja ostatnia praca obejmowała opracowanie czytnika PDF dla platformy Windows i pracę nad tym, aby komunikaty o błędach były bardziej zrozumiałe dla użytkowników. Dodatkowo od kilku lat jestem zaangażowany w rozwój platformy ios i dobrze znam zarówno jej funkcje, jak i dziwactwa.



Related posts