Создание установщика службы Windows

При создании службы Windows .NET (не следует ошибаться со службой платформа .NET Framework Windows), может потребоваться создать установщик для службы. Без установщика пользователям потребуется узнать, как установить и настроить службу. Установщик объединяет исполняемые файлы приложения и предоставляет настраиваемое взаимодействие с пользователем установки. Это руководство является продолжением руководства по созданию службы Windows. В нем показано, как создать установщик для службы Windows .NET.

Из этого руководства вы узнаете, как выполнять следующие задачи:

  • Установите расширение проектов установщика Visual Studio.
  • Создайте проект установки.
  • Обновите существующий рабочий проект .NET для поддержки установки.
  • Автоматизация установки и удаления с помощью диспетчера управления службами Windows.

Необходимые компоненты

Установка зависимостей инструментов

Начните с установки набора инструментов Wix. Набор инструментов Wix — это набор средств, которые создают пакеты установки Windows из исходного кода XML.

dotnet tool install --global wix

Затем установите расширение HeatWave для VS2022. После установки перезапустите Visual Studio и увидите доступные новые шаблоны проектов.

Получение существующего проекта

Это руководство основано на приложении, созданном в рамках руководства по созданию службы Windows с помощью учебника BackgroundService . Вы можете клонировать пример репозитория или использовать приложение, созданное в предыдущем руководстве.

Совет

Весь пример исходного кода "Рабочие роли в .NET" доступен для скачивания в Обозревателе примеров. Дополнительные сведения см. в разделе Обзор примеров кода: рабочие роли в .NET.

Откройте решение в Visual Studio и выберите F5 , чтобы убедиться, что приложение создает и выполняется должным образом. Нажмите клавиши CTRL+C, чтобы остановить приложение.

Добавление нового проекта установки

Чтобы добавить новый проект установки Wix, щелкните правой кнопкой мыши решение в Обозреватель решений и выберите пункт "Добавить > новый проект":

Add new project dialog: New MSI Package (Wix v4) Project.

Выберите пакет MSI (Wix версии 4) из доступных шаблонов, а затем нажмите кнопку "Далее". Укажите нужное имя и расположение, а затем нажмите кнопку "Создать".

Настройка проекта установщика

Чтобы настроить проект установки, сначала необходимо добавить ссылку на App.WindowsService проект. Щелкните правой кнопкой мыши проект установки в Обозреватель решений и выберите "Добавить > ссылку на проект".

Шаблон включает примеры компонентов и файлы локализации. Удалите эти файлы, оставив только файл Package.wxs . Теперь проект должен включать элемент, аналогичный ProjectReference следующему:

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

После добавления ссылки на проект настройте файл Package.wxs . Откройте файл в редакторе и замените содержимое следующим образом:

<?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>

При сборке проекта выходные данные — это MSI-файл, который можно использовать для установки и удаления службы.

Тестовая установка

Чтобы протестировать установщик, опубликуйте проект App.WindowsService . Щелкните проект правой кнопкой мыши в Обозреватель решений и выберите "Опубликовать". После публикации с профилем, созданным в предыдущем руководстве, исполняемый файл будет находиться в каталоге публикации. Затем вы создадите проект установки и запустите установщик.

Необходимо запустить установку от имени администратора. Для этого щелкните файл MSI правой кнопкой мыши и выберите команду "Запуск от имени администратора".

После установки службы можно открыть службы , чтобы увидеть запущенную службу. Чтобы удалить службу, используйте функцию "Добавление или удаление программ " Windows для вызова установщика.

См. также