Создание установщика службы Windows
При создании службы Windows .NET (не следует ошибаться со службой платформа .NET Framework Windows), может потребоваться создать установщик для службы. Без установщика пользователям потребуется узнать, как установить и настроить службу. Установщик объединяет исполняемые файлы приложения и предоставляет настраиваемое взаимодействие с пользователем установки. Это руководство является продолжением руководства по созданию службы Windows. В нем показано, как создать установщик для службы Windows .NET.
Из этого руководства вы узнаете, как выполнять следующие задачи:
- Установите расширение проектов установщика Visual Studio.
- Создайте проект установки.
- Обновите существующий рабочий проект .NET для поддержки установки.
- Автоматизация установки и удаления с помощью диспетчера управления службами Windows.
Необходимые компоненты
- Ожидается, что вы завершили руководство по созданию службы Windows или подготовите клонировать пример репозитория.
- Пакет SDK для .NET 8.0 или более поздней версии
- ОС Windows
- Интегрированная среда разработки .NET (IDE)
- Можно использовать Visual Studio
- Существующая служба Windows .NET
Установка зависимостей инструментов
Начните с установки набора инструментов Wix. Набор инструментов Wix — это набор средств, которые создают пакеты установки Windows из исходного кода XML.
dotnet tool install --global wix
Затем установите расширение HeatWave для VS2022. После установки перезапустите Visual Studio и увидите доступные новые шаблоны проектов.
Получение существующего проекта
Это руководство основано на приложении, созданном в рамках руководства по созданию службы Windows с помощью учебника BackgroundService . Вы можете клонировать пример репозитория или использовать приложение, созданное в предыдущем руководстве.
Совет
Весь пример исходного кода "Рабочие роли в .NET" доступен для скачивания в Обозревателе примеров. Дополнительные сведения см. в разделе Обзор примеров кода: рабочие роли в .NET.
Откройте решение в Visual Studio и выберите F5 , чтобы убедиться, что приложение создает и выполняется должным образом. Нажмите клавиши CTRL+C, чтобы остановить приложение.
Добавление нового проекта установки
Чтобы добавить новый проект установки Wix, щелкните правой кнопкой мыши решение в Обозреватель решений и выберите пункт "Добавить > новый проект":
Выберите пакет 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 для вызова установщика.