Delen via


Een Windows-service-installatieprogramma maken

Wanneer u een .NET Windows-service maakt (niet te verwarren met een .NET Framework Windows-service), kunt u een installatieprogramma voor uw service maken. Zonder installatieprogramma moeten gebruikers weten hoe ze uw service moeten installeren en configureren. Een installatieprogramma bundelt de uitvoerbare bestanden van uw app en biedt een aanpasbare gebruikerservaring voor installatie. Deze zelfstudie is een vervolg van de zelfstudie Een Windows-service maken . Het laat zien hoe u een installatieprogramma maakt voor uw .NET Windows-service.

In deze zelfstudie leert u het volgende:

  • Installeer de visual Studio Installer Projects-extensie.
  • Maak een installatieproject.
  • Werk een bestaand .NET Worker-project bij om de installatie te ondersteunen.
  • Automatiseer de installatie en verwijdering met Windows Service Control Manager.

Vereiste voorwaarden

  • Van u wordt verwacht dat u de zelfstudie Een Windows Service maken hebt voltooid, of bereid bent om de voorbeeldrepository te klonen.
  • De .NET 8.0 SDK of nieuwer
  • Een Windows-besturingssysteem
  • Een .NET geïntegreerde ontwikkelomgeving (IDE)
  • Een bestaande .NET Windows-service

Afhankelijkheden voor tooling installeren

Begin met het installeren van de Wix Toolset. De Wix Toolset is een set hulpprogramma's waarmee Windows-installatiepakketten worden gebouwd op basis van XML-broncode.

dotnet tool install --global wix

Installeer vervolgens de HeatWave voor VS2022-extensie. Nadat u Visual Studio hebt geïnstalleerd, start u Visual Studio opnieuw op en ziet u dat er nieuwe projectsjablonen beschikbaar zijn.

Bestaand project ophalen

Deze zelfstudie is gebaseerd op de app die is gemaakt als onderdeel van de zelfstudie Een Windows-service maken met behulp van BackgroundService . U kunt de voorbeeldopslagplaats klonen of de app gebruiken die u in de vorige zelfstudie hebt gemaakt.

Hint

Alle voorbeeldbroncode 'Workers in .NET' is beschikbaar in de Samples Browser voor downloaden. Zie voor meer informatie Blader door codevoorbeelden: Workers in .NET.

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.

Nieuw installatieproject toevoegen

Als u een nieuw Wix-installatieproject wilt toevoegen, klikt u met de rechtermuisknop op de oplossing in Solution Explorer en selecteert u Nieuw project toevoegen>:

Dialoogvenster Nieuw project toevoegen: Nieuw MSI-pakketproject (Wix v4).

Selecteer MSI-pakket (Wix v4) in de beschikbare sjablonen en klik op vervolgens Volgende. Geef de gewenste naam en locatie op en selecteer Creëren.

Installatieproject configureren

Als u het installatieproject wilt configureren, moet u eerst een verwijzing naar het App.WindowsService project toevoegen. Klik met de rechtermuisknop op het installatieproject in Solution Explorer en selecteer Vervolgens Projectverwijzing toevoegen>.

De sjabloon bevat voorbeeldonderdelen en lokalisatiebestanden. Verwijder deze bestanden, zodat alleen het bestand Package.wxs overblijft. Uw project moet nu een ProjectReference element bevatten dat er ongeveer als volgt uitziet:

<Project Sdk="WixToolset.Sdk/4.0.0">
  <ItemGroup>
    <ProjectReference Include="..\App.WindowsService.csproj" />
  </ItemGroup>
</Project>

Nadat de projectreferentie is toegevoegd, configureert u het bestand Package.wxs . Open het bestand in de editor en vervang de inhoud door het volgende:

<?xml version="1.0" encoding="UTF-8"?>

<!-- Define the variables in "$(var.*) expressions" -->
<?define Name = ".NET Joke Service" ?>
<?define Manufacturer = "Microsoft" ?>
<?define Version = "1.0.0.0" ?>
<?define UpgradeCode = "9ED3FF33-8718-444E-B44B-69A2344B7E98" ?>

<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
    <Package Name="$(Name)"
             Manufacturer="$(Manufacturer)"
             Version="$(Version)"
             UpgradeCode="$(var.UpgradeCode)"
             Compressed="true">

        <!-- Allow upgrades and prevent downgrades -->
        <MajorUpgrade DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." />

        <!-- Define the directory structure -->
        <StandardDirectory Id="ProgramFiles6432Folder">

            <!-- Create a folder inside program files -->
            <Directory Id="ROOTDIRECTORY" Name="$(var.Manufacturer)">

                <!-- Create a folder within the parent folder given the name -->
                <Directory Id="INSTALLFOLDER" Name="$(Name)" />
            </Directory>
        </StandardDirectory>

        <!-- The files inside this DirectoryRef are linked to
             the App.WindowsService directory via INSTALLFOLDER -->
        <DirectoryRef Id="INSTALLFOLDER">

            <!-- Create a single component which is the App.WindowsService.exe file -->
            <Component Id="ServiceExecutable" Bitness="always64">

                <!-- Copies the App.WindowsService.exe file using the
                     project reference preprocessor variables -->
                <File Id="App.WindowsService.exe"
                      Source="$(var.App.WindowsService.TargetDir)publish\App.WindowsService.exe"
                      KeyPath="true" />

                <!-- Remove all files from the INSTALLFOLDER on uninstall -->
                <RemoveFile Id="ALLFILES" Name="*.*" On="both" />

                <!-- Tell WiX to install the Service -->
                <ServiceInstall Id="ServiceInstaller"
                                Type="ownProcess"
                                Name="App.WindowsService"
                                DisplayName="$(Name)"
                                Description="A joke service that periodically logs nerdy humor."
                                Start="auto"
                                Account="LocalService"
                                ErrorControl="normal" />

                <!-- Tell WiX to start the Service -->
                <ServiceControl Id="StartService"
                                Start="install"
                                Stop="both"
                                Remove="uninstall"
                                Name="App.WindowsService"
                                Wait="true" />
            </Component>
        </DirectoryRef>

        <!-- Tell WiX to install the files -->
        <Feature Id="Service" Title="App.WindowsService Setup" Level="1">
            <ComponentRef Id="ServiceExecutable" />
        </Feature>

    </Package>
</Wix>

Het ServiceInstall kenmerk van Account het element geeft het account op waaronder de service wordt uitgevoerd. Het LocalService account is een ingebouwd account met verminderde bevoegdheden die geschikt zijn voor de meeste services. Veelvoorkomende waarden zijn:

  • LocalService: Een ingebouwd account met beperkte bevoegdheden en geen netwerkreferenties.
  • NetworkService: Vergelijkbaar met LocalService, maar heeft netwerkreferenties.
  • LocalSystem: Het hoogste bevoegdheidsniveau (gebruik met voorzichtigheid).

Wanneer u het project bouwt, is de uitvoer een MSI-bestand dat kan worden gebruikt om de service te installeren en te verwijderen.

Installatie testen

Publiceer het App.WindowsService-project om het installatieprogramma te testen. Klik met de rechtermuisknop op het project in Solution Explorer en selecteer Publiceren. Nadat het uitvoerbare bestand is gepubliceerd met het profiel dat u in de vorige tutorial hebt gemaakt, bevindt het zich in de map voor publicatie. Vervolgens bouwt u het installatieproject en voert u het installatieprogramma uit.

U moet de installatie uitvoeren als beheerder. Hiervoor klikt u met de rechtermuisknop op het MSI-bestand en selecteert u Uitvoeren als administrator.

Zodra de service is geïnstalleerd, kunt u Services openen om te zien of de service wordt uitgevoerd. Als u de service wilt verwijderen, gebruikt u de functie Windows Programma's toevoegen of verwijderen om het installatieprogramma aan te roepen.

Zie ook