Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Al crear un servicio de Windows de .NET (no confundirse con un servicio de Windows de .NET Framework), es posible que desee crear 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 archivos ejecutables de la aplicación y expone 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 de Windows de .NET.
En este tutorial, aprenderá a:
- Instale la extensión Proyectos del instalador de Visual Studio.
- Cree un proyecto de instalación.
- Actualice un proyecto de trabajo de .NET existente para admitir la instalación.
- Automatice la instalación y desinstalación con el Administrador de control de servicios de Windows.
Prerrequisitos
- Se espera que haya completado el tutorial Creación de un servicio de Windows o esté preparado para clonar el repositorio de ejemplo.
- 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
Comience instalando el conjunto de herramientas de Wix. El conjunto de herramientas de Wix es un conjunto de herramientas que compilan 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 HeatWave para VS2022. Después de la instalación, reinicie Visual Studio y verá nuevas plantillas de proyecto disponibles.
Acceder al 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 código fuente de ejemplo de "Workers in .NET" está disponible en el Explorador de Muestras para su descarga. Para obtener más información, vea Examinar 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.
Agregar nuevo proyecto de instalación
Para agregar un nuevo proyecto de configuració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, a continuación, seleccione Crear.
Configuración del proyecto del instalador
Para configurar el proyecto de instalación, primero debe agregar una referencia al App.WindowsService proyecto. 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 localización y componentes de ejemplo. Elimine estos archivos y deje solo el archivo Package.wxs . El proyecto debe incluir ahora un ProjectReference elemento 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 -->
<StandardDirectory Id="ProgramFiles6432Folder">
<!-- 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"
Account="LocalService"
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>
El ServiceInstall atributo del Account elemento especifica la cuenta con la que se ejecuta el servicio. La LocalService cuenta es una cuenta integrada con privilegios reducidos adecuados para la mayoría de los servicios. Los valores habituales son:
-
LocalService: una cuenta integrada con privilegios reducidos y sin credenciales de red. -
NetworkService: similar a LocalService, pero tiene credenciales de red. -
LocalSystem: el nivel de privilegio más alto (use con precaución).
Al compilar el proyecto, la salida es un archivo MSI que se puede usar para instalar y desinstalar el servicio.
Instalación de pruebas
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 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.


