Creación de un instalador de servicio de Windows
Al crear un servicio de Windows de .NET (no confundir con un servicio de Windows de .NET Framework), es posible que quiera crear también un instalador para el servicio. Sin un instalador, los usuarios tendrían que saber cómo instalar y configurar el servicio. Un instalador agrupa los ejecutables de la aplicación y ofrece una experiencia de usuario de instalación personalizable. Este tutorial es una continuación del tutorial Creación de un servicio de Windows. Muestra cómo crear un instalador para el servicio Windows de .NET.
En este tutorial, aprenderá a:
- Instalar la extensión Visual Studio Installer Projects.
- Crear un proyecto de instalación.
- Actualizar un proyecto de trabajo de .NET existente para admitir la instalación.
- Automatizar la instalación y desinstalación con el Administrador de control de servicios de Windows.
Requisitos previos
- Se espera que haya completado el tutorial Creación de un servicio de Windows o esté preparado para clonar el repositorio de ejemplo.
- El SDK de .NET 8.0 o posterior
- Un sistema operativo Windows
- Un entorno de desarrollo integrado (IDE) de .NET
- No dude en usar Visual Studio
- Un servicio de Windows de .NET existente
Instalación de dependencias de herramientas
Empiece por instalar el conjunto de herramientas de Wix. El conjunto de herramientas de Wix es un conjunto de herramientas que crean paquetes de instalación de Windows a partir del código fuente XML.
dotnet tool install --global wix
A continuación, instale la extensión de HeatWave para VS2022. Después de instalarla, reinicie Visual Studio y verá que hay nuevas plantillas de proyecto disponibles.
Obtención del proyecto existente
Este tutorial se basa en la aplicación creada como parte del tutorial Creación de un servicio de Windows mediante BackgroundService. Puede clonar el repositorio de ejemplo o usar la aplicación que creó en el tutorial anterior.
Sugerencia
Todo el ejemplo de "Trabajos en .NET" está disponible en el Explorador de ejemplos para su descarga. Para obtener más información, consulte Examinación de ejemplos de código: Trabajos en .NET.
Abra la solución en Visual Studio y seleccione F5 para asegurarse de que la aplicación se compila y se ejecuta según lo previsto. Presione CTRL+C para detener la aplicación.
Adición de un nuevo proyecto de instalación
Para agregar un nuevo proyecto de instalación de Wix, haga clic con el botón derecho en la solución en el Explorador de soluciones y seleccione Agregar > Nuevo proyecto:
Seleccione Paquete MSI (Wix v4) en las plantillas disponibles y, a continuación, seleccione Siguiente. Proporcione el nombre y la ubicación deseados y, después, seleccione Crear.
Configuración del proyecto de instalador
Para configurar el proyecto de instalación, primero debe agregar una referencia al proyecto App.WindowsService
. Haga clic con el botón derecho en el proyecto de instalación en el Explorador de soluciones y seleccione Agregar > Referencia de proyecto.
La plantilla incluye archivos de componente y localización de ejemplo. Elimine estos archivos y deje solo el archivo Package.wxs. El proyecto ahora debe incluir un elemento ProjectReference
similar al siguiente:
<Project Sdk="WixToolset.Sdk/4.0.0">
<ItemGroup>
<ProjectReference Include="..\App.WindowsService.csproj" />
</ItemGroup>
</Project>
Una vez agregada la referencia del proyecto, configure el archivo Package.wxs. Abra el archivo en el editor y reemplace el contenido por lo siguiente:
<?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>
Al compilar el proyecto, la salida es un archivo MSI que se puede usar para instalar y desinstalar el servicio.
Prueba de la instalación
Para probar el instalador, publique el proyecto App.WindowsService. Haga clic con el botón derecho en el proyecto en el Explorador de soluciones y seleccione Publicar. Una vez publicado con el perfil que creó en el tutorial anterior, el ejecutable estará en el directorio publish. A continuación, compile el proyecto de instalación y ejecute el instalador.
Debe ejecutar la instalación como administrador. Para ello, haga clic con el botón derecho en el archivo .msi y, a continuación, seleccione Ejecutar como administrador.
Una vez instalado el servicio, puede abrir Servicios para ver el servicio en ejecución. Para desinstalar el servicio, use la característica Agregar o quitar programas de Windows para llamar al instalador.