Udostępnij za pośrednictwem


Tworzenie instalatora usługi systemu Windows

Podczas tworzenia usługi systemu Windows platformy .NET (aby nie pomylić się z usługą .NET Framework dla systemu Windows), możesz utworzyć instalatora dla 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 czynności:

  • Zainstaluj rozszerzenie Instalator programu Visual Studio Projects.
  • 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

Instalowanie zależności narzędzi

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.

Napiwek

Cały przykładowy kod źródłowy "Pracownicy na platformie .NET" jest dostępny w przeglądarce 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 klawisze Ctrl+C, aby zatrzymać aplikację.

Dodawanie nowego projektu instalacyjnego

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

Add new project dialog: New MSI Package (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 Eksplorator 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 -->
        <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>

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 Eksplorator rozwiązań, a następnie wybierz pozycję 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 też