Un servizio windows può essere creato partendo dal template
Worker Service di
Visual Studio 2019Creazione progetto
Il progetto può essere creato da interfaccia grafica di
Visual Studio 2019 o da linea di comando
dotnet new worker -o Sgart.Net5.WorkerService
Per renderlo a tutti gli effetti un
servizio windows, va installato il pacchetto NuGet
Microsoft.Extensions.Hosting.WindowsServicesdotnet add package Microsoft.Extensions.Hosting.WindowsServices
e aggiunto
.UseWindowsService() in
CreateHostBuildernamespace Sgart.Net5.WorkerService
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
// registro il Worker
services.AddHostedService<Worker>();
})
.UseWindowsService(); // lo configuro come Windows Service
}
}
il
Worker Service di esempio è questo
namespace Sgart.Net5.WorkerService
{
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
await Task.Delay(1000, stoppingToken);
}
}
}
}
Questo è tutto, può essere eseguito in
debug premendo
F5 senza necessità di installarlo.
Installazione
Per
installarlo come
servizio windows si può usare il comando
DOS sc.exe, ad esempio
sc create "SgartNet5WorkerService" DisplayName="Sgart Demo Service" binPath="C:\...\Sgart.Net5.WorkerService.exe"
sc description SgartNet5WorkerService "Sgart.it servizio demo in .NET 5"
Eseguire i comandi con elevati privilegi.
può essere
avviato o
fermato con
sc start "SgartNet5WorkerService"
sc stop "SgartNet5WorkerService"
Il nome SgartNet5WorkerService è arbitrario, si può scegliere qualsiasi nome, l'unico vincolo è che non sia in conflitto con un servizio esistente.
Il servizio viene installato con l'utente NT AUTHORITY\SYSTEM.
Se deve accedere a risorse esterne come database o file system, sarà necessario riconfiguralo per girare con un utente di dominio.
Quando non serve più, può essere
rimosso con
sc delete "SgartNet5WorkerService"
Per verificare se l'installazione è andata a buon fine
sc qc SgartNet5WorkerService
da un risultato simile a questo
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: SgartNet5WorkerService
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 3 DEMAND_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : C:\...\Sgart.Net5.WorkerService.exe
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : SgartNet5WorkerService
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem
Installazione in PowerShell
L'installazione può essere fatta anche con
PowerShell tramite i seguenti comandi
$params = @{
Name = "SgartNet5WorkerService"
BinaryPathName = 'C:\...\Sgart.Net5.WorkerService.exe'
DisplayName = "Sgart Demo Service"
StartupType = "Manual"
Description = "Sgart.it servizio demo in .NET 5"
}
New-Service @params
Start-Service SgartNet5WorkerService
Stop-Service SgartNet5WorkerService
Get-Service SgartNet5WorkerService | select *
Demo
Vedi l'esempio completo su
GitHub - Sgart.Net5.WorkerService.