Open de oplossing in Visual Studio en selecteer F5 om ervoor te zorgen dat de app wordt gebouwd en uitgevoerd zoals verwacht. Druk op Ctrl+C om de app te stoppen.
Installatieswitches verwerken
De Windows Service-app moet installatieswitches afhandelen. Het installatieproject roept respectievelijk tijdens de installatie en verwijdering de Windows Service-app aan en /Install
/Uninstall
schakelt over. Wanneer deze switches aanwezig zijn, gedraagt de app zich anders, omdat de app alleen installatie of verwijdering uitvoert met behulp van het uitvoerbare bestand van Windows Service Control Manager (sc.exe).
Installeer het CliWrap NuGet-pakket als gemak om de app een afzonderlijk proces aan te roepen. Gebruik de dotnet add package
opdracht om het CliWrap
pakket te installeren:
dotnet add App.WindowsService.csproj package CliWrap
Zie dotnet add package voor meer informatie.
Als CliWrap
dit is geïnstalleerd, opent u het bestand Program.cs van het App.WindowsService
project. Voeg na de using
instructies, maar voordat de IHost
wordt gemaakt, de volgende code toe:
using CliWrap;
const string ServiceName = ".NET Joke Service";
if (args is { Length: 1 })
{
try
{
string executablePath =
Path.Combine(AppContext.BaseDirectory, "App.WindowsService.exe");
if (args[0] is "/Install")
{
await Cli.Wrap("sc")
.WithArguments(new[] { "create", ServiceName, $"binPath={executablePath}", "start=auto" })
.ExecuteAsync();
}
else if (args[0] is "/Uninstall")
{
await Cli.Wrap("sc")
.WithArguments(new[] { "stop", ServiceName })
.ExecuteAsync();
await Cli.Wrap("sc")
.WithArguments(new[] { "delete", ServiceName })
.ExecuteAsync();
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
return;
}
Met de voorgaande code wordt:
- Declareert de servicenaam als een
const string
waarde.
- Hiermee wordt gecontroleerd
args
op één waarde.
- Hiermee haalt u het uitvoerbare pad op van de AppContext.BaseDirectory.
- Wanneer de
"/Install"
schakelaar aanwezig is, sc create ".NET Joke Service" binPath="path/to/App.WindowsService.exe" start=auto
wordt aangeroepen.
- Wanneer de
"/Uninstall"
schakelaar aanwezig sc stop ".NET Joke Service"
is en sc delete ".NET Joke Service"
worden aangeroepen.
Wanneer er geen installatieswitches aanwezig zijn, gedraagt de app zich zoals voorheen, maar bevat deze nu de installatiefunctionaliteit.
Notitie
Het definiëren van aangepaste acties en het handmatig afhandelen van installatieswitches wordt beschouwd als een antipatroon. Hoewel deze documentatie laat zien hoe u dit doet, kunt u overwegen om in plaats daarvan de Wix Toolset van derden te gebruiken.