Teilen über


Erstellen eines Windows-Dienst-Installationsprogramms

Wenn Sie einen .NET-Windows-Dienst erstellen (nicht mit einem .NET Framework-Windows-Dienst zu verwechseln), sollten Sie ein Installationsprogramm für Ihren Dienst erstellen. Ohne ein Installationsprogramm müssten Benutzer wissen, wie Sie Ihren Dienst installieren und konfigurieren können. Ein Installationsprogramm bündelt die ausführbaren Dateien Ihrer App und macht eine anpassbare Benutzeroberfläche für die Installation verfügbar. Dieses Lernprogramm ist eine Fortsetzung des Lernprogramms zum Erstellen eines Windows-Diensts . Es zeigt, wie Sie ein Installationsprogramm für Ihren .NET Windows-Dienst erstellen.

In diesem Tutorial lernen Sie, wie Sie:

  • Installieren Sie die Visual Studio Installer Projects-Erweiterung.
  • Erstellen Sie ein Setupprojekt.
  • Aktualisieren Sie ein vorhandenes .NET Worker-Projekt, um die Installation zu unterstützen.
  • Automatisieren Sie die Installation und Deinstallation mit dem Windows Service Control Manager.

Voraussetzungen

Tool-Abhängigkeiten installieren

Installieren Sie zunächst das Wix-Toolset. Das Wix Toolset ist eine Reihe von Tools, mit denen Windows-Installationspakete aus XML-Quellcode erstellt werden.

dotnet tool install --global wix

Installieren Sie als Nächstes die Erweiterung HeatWave für VS2022. Starten Sie nach der Installation Visual Studio neu, und es sind neue Projektvorlagen verfügbar.

Vorhandenes Projekt abrufen

Dieses Lernprogramm basiert auf der App, die im Rahmen des Lernprogramms "Erstellen eines Windows-Diensts mit BackgroundService " erstellt wurde. Sie können entweder das Beispiel-Repository klonen oder die App verwenden, die Sie im vorherigen Lernprogramm erstellt haben.

Tipp

Der Quellcode "Workers in .NET" ist im Beispielbrowser zum Herunterladen verfügbar. Weitere Informationen finden Sie unter Durchsuchen von Codebeispielen: Worker in .NET.

Öffnen Sie die Projektmappe in Visual Studio, und wählen Sie F5 aus, um sicherzustellen, dass die App wie erwartet erstellt und ausgeführt wird. Drücken Sie STRG+C , um die App zu beenden.

Neues Setupprojekt hinzufügen

Klicken Sie zum Hinzufügen eines neuen Wix-Setupprojekts im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe, und wählen Sie Hinzufügen > Neues Projekt aus:

Dialogfeld zum Hinzufügen eines neuen Projekts: Neues MSI-Paketprojekt (Wix v4)

Wählen Sie in den verfügbaren Vorlagen MSI-Paket (Wix v4) und dann "Weiter" aus. Geben Sie den gewünschten Namen und speicherort an, und wählen Sie dann "Erstellen" aus.

Konfigurieren des Installationsprojekts

Zum Konfigurieren des Setupprojekts müssen Sie zuerst einen Verweis auf das App.WindowsService Projekt hinzufügen. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Setupprojekt, und wählen Sie dann Hinzufügen > Projektverweis aus.

Die Vorlage enthält Beispielkomponenten- und Lokalisierungsdateien. Löschen Sie diese Dateien, wobei nur die Datei "Package.wxs " übrig bleibt. Ihr Projekt sollte nun ein ProjectReference Element enthalten, ähnlich dem folgenden:

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

Konfigurieren Sie nach dem Hinzufügen der Projektreferenz die Datei "Package.wxs ". Öffnen Sie die Datei im Editor, und ersetzen Sie dann den Inhalt durch Folgendes:

<?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 -->
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFiles64Folder">

                <!-- 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>
            </Directory>
        </Directory>

        <!-- 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"
                                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>

Beim Erstellen des Projekts handelt es sich bei der Ausgabe um eine MSI-Datei, die zum Installieren und Deinstallieren des Diensts verwendet werden kann.

Testen der Installation

Um das Installationsprogramm zu testen, veröffentlichen Sie das App.WindowsService-Projekt . Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie dann "Veröffentlichen" aus. Nach der Veröffentlichung mit dem Profil, das Sie im vorherigen Lernprogramm erstellt haben, befindet sich die ausführbare Datei im Veröffentlichungsverzeichnis. Als Nächstes erstellen Sie das Setupprojekt, und führen Sie das Installationsprogramm aus.

Sie müssen die Installation als Administrator ausführen. Klicken Sie dazu mit der rechten Maustaste auf die MSI-Datei, und wählen Sie dann "Als Administrator ausführen" aus.

Nachdem der Dienst installiert wurde, können Sie Dienste öffnen, um den Dienst anzuzeigen, der ausgeführt wird. Verwenden Sie zum Deinstallieren des Diensts das Feature "Windows-Programme hinzufügen oder entfernen ", um das Installationsprogramm aufzurufen.

Siehe auch