Udostępnij przez


Tworzenie instalatora usługi systemu Windows

Podczas tworzenia usługi Windows w .NET (nie należy mylić z usługą Windows w .NET Framework), warto rozważyć utworzenie instalatora dla tej usługi. Bez instalatora użytkownicy musieliby wiedzieć, jak zainstalować i skonfigurować usługę. Instalator pakuje pliki wykonywalne aplikacji i uwidacznia dostosowywalne środowisko użytkownika instalacji. Ten samouczek jest kontynuacją samouczka Tworzenie usługi systemu Windows . Pokazano w nim, jak utworzyć instalatora dla usługi systemu Windows platformy .NET.

Z tego samouczka dowiesz się, jak wykonywać następujące działania:

  • Zainstaluj rozszerzenie Projekty instalatora programu Visual Studio.
  • Utwórz projekt instalacyjny.
  • Zaktualizuj istniejący projekt procesu roboczego platformy .NET, aby obsługiwał instalację.
  • Zautomatyzuj instalację i odinstalowywanie za pomocą Menedżera sterowania usługami systemu Windows.

Wymagania wstępne

  • Oczekuje się, że ukończysz samouczek Tworzenie usługi systemu Windows lub przygotujesz się do sklonowania przykładowego repozytorium.
  • Zestaw SDK .NET 8.0 lub nowszy
  • System operacyjny Windows
  • Zintegrowane środowisko projektowe (IDE) platformy .NET
  • Istniejąca usługa systemu Windows platformy .NET

Zainstaluj zależności narzędziowe

Zacznij od zainstalowania zestawu narzędzi Wix. Zestaw narzędzi Wix to zestaw narzędzi, które tworzą pakiety instalacyjne systemu Windows z kodu źródłowego XML.

dotnet tool install --global wix

Następnie zainstaluj rozszerzenie HeatWave dla programu VS2022. Po zainstalowaniu uruchom ponownie program Visual Studio i zobaczysz dostępne nowe szablony projektów.

Pobieranie istniejącego projektu

Ten samouczek jest oparty na aplikacji utworzonej w ramach samouczka Tworzenie usługi systemu Windows przy użyciu usługi BackgroundService . Możesz sklonować przykładowe repozytorium lub użyć aplikacji utworzonej w poprzednim samouczku.

Wskazówka

Cały przykładowy kod źródłowy "Pracownicy na platformie .NET" jest dostępny w Samples Browser do pobrania. Aby uzyskać więcej informacji, zobacz Przeglądanie przykładów kodu: Procesy robocze na platformie .NET.

Otwórz rozwiązanie w programie Visual Studio i wybierz pozycję F5 , aby upewnić się, że aplikacja kompiluje i działa zgodnie z oczekiwaniami. Naciśnij Ctrl+C, aby zatrzymać aplikację.

Dodawanie nowego projektu instalacyjnego

Aby dodać nowy projekt instalacyjny Wix, kliknij prawym przyciskiem myszy rozwiązanie w Eksploratorze rozwiązań i wybierz polecenie Dodaj > nowy projekt:

Okno dialogowe Dodawanie nowego projektu: Nowy pakiet MSI (Wix v4) Project.

Wybierz pozycję Pakiet MSI (Wix v4) z dostępnych szablonów, a następnie wybierz pozycję Dalej. Podaj żądaną nazwę i lokalizację, a następnie wybierz pozycję Utwórz.

Konfigurowanie projektu instalatora

Aby skonfigurować projekt instalacyjny, należy najpierw dodać odwołanie do App.WindowsService projektu. Kliknij prawym przyciskiem myszy projekt instalacyjny w Eksploratorze rozwiązań, a następnie wybierz polecenie Dodaj > odwołanie do projektu.

Szablon zawiera przykładowe pliki składników i lokalizacji. Usuń te pliki, pozostawiając tylko plik Package.wxs . Projekt powinien teraz zawierać ProjectReference element podobny do następującego:

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

Po dodaniu odwołania do projektu skonfiguruj plik Package.wxs . Otwórz plik w edytorze, a następnie zastąp zawartość następującym kodem:

<?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="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>
        </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"
                                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>

Podczas kompilowania projektu dane wyjściowe to plik MSI, którego można użyć do zainstalowania i odinstalowania usługi.

Instalacja testowa

Aby przetestować instalator, opublikuj projekt App.WindowsService . Kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań, a następnie wybierz polecenie Publikuj. Po opublikowaniu przy użyciu profilu utworzonego w poprzednim samouczku plik wykonywalny będzie znajdować się w katalogu publikowania. Następnie skompilujesz projekt instalacyjny i uruchomisz instalatora.

Musisz uruchomić instalację jako administrator. W tym celu kliknij prawym przyciskiem myszy plik MSI, a następnie wybierz polecenie Uruchom jako administrator.

Po zainstalowaniu usługi możesz otworzyć usługę , aby wyświetlić uruchomioną usługę. Aby odinstalować usługę, użyj funkcji Dodaj lub Usuń programy systemu Windows , aby wywołać instalatora.

Zobacz także