feat: add Windows Service integration via --service flag

Adds Microsoft.Extensions.Hosting.WindowsServices package and a --service
CLI flag to Program.cs that logs service mode activation, enabling future
Windows Service lifecycle management.
This commit is contained in:
Joseph Doherty
2026-02-23 04:26:04 -05:00
parent f316e6e86e
commit cd87a48343
3 changed files with 13 additions and 0 deletions

View File

@@ -15,6 +15,9 @@
<PackageVersion Include="NATS.NKeys" Version="1.0.0-preview.3" /> <PackageVersion Include="NATS.NKeys" Version="1.0.0-preview.3" />
<PackageVersion Include="BCrypt.Net-Next" Version="4.0.3" /> <PackageVersion Include="BCrypt.Net-Next" Version="4.0.3" />
<!-- Windows Service -->
<PackageVersion Include="Microsoft.Extensions.Hosting.WindowsServices" Version="10.0.0" />
<!-- Testing --> <!-- Testing -->
<PackageVersion Include="coverlet.collector" Version="6.0.4" /> <PackageVersion Include="coverlet.collector" Version="6.0.4" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.14.1" /> <PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />

View File

@@ -9,6 +9,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" />
<PackageReference Include="Serilog.Extensions.Hosting" /> <PackageReference Include="Serilog.Extensions.Hosting" />
<PackageReference Include="Serilog.Sinks.Console" /> <PackageReference Include="Serilog.Sinks.Console" />
<PackageReference Include="Serilog.Sinks.File" /> <PackageReference Include="Serilog.Sinks.File" />

View File

@@ -3,6 +3,7 @@ using Serilog;
using Serilog.Sinks.SystemConsole.Themes; using Serilog.Sinks.SystemConsole.Themes;
var options = new NatsOptions(); var options = new NatsOptions();
var windowsService = false;
// Parse ALL CLI flags into NatsOptions first // Parse ALL CLI flags into NatsOptions first
for (int i = 0; i < args.Length; i++) for (int i = 0; i < args.Length; i++)
@@ -81,6 +82,9 @@ for (int i = 0; i < args.Length; i++)
case "--remote_syslog" when i + 1 < args.Length: case "--remote_syslog" when i + 1 < args.Length:
options.RemoteSyslog = args[++i]; options.RemoteSyslog = args[++i];
break; break;
case "--service":
windowsService = true;
break;
} }
} }
@@ -133,6 +137,11 @@ else if (options.Syslog)
Log.Logger = logConfig.CreateLogger(); Log.Logger = logConfig.CreateLogger();
if (windowsService)
{
Log.Information("Windows Service mode requested");
}
using var loggerFactory = new Serilog.Extensions.Logging.SerilogLoggerFactory(Log.Logger); using var loggerFactory = new Serilog.Extensions.Logging.SerilogLoggerFactory(Log.Logger);
using var server = new NatsServer(options, loggerFactory); using var server = new NatsServer(options, loggerFactory);