Introducción a los servicios de Windows en C#
Los servicios de Windows son potentes herramientas del ecosistema .NET, capaces de realizar tareas en segundo plano sin intervención del usuario. Crear un servicio de Windows en C# puede parecer complejo, pero en su vídeo "Intro to Windows Services in C# - How to create, install, and use a service using Topshelf", Tim Corey lo explica paso a paso.
En este artículo, repasaremos ese vídeo, cubriendo cada tema para aportar claridad y continuidad.
Introducción a los servicios de Windows
Tim presenta los servicios de Windows como herramientas de automatización potentes y a menudo olvidadas. Estas aplicaciones están diseñadas para ejecutarse en segundo plano, gestionando tareas sin necesidad de una interfaz de usuario. Algunos ejemplos comunes son el agente de SQL Server o los servicios de Hyper-V.
Tim hace hincapié en la importancia de la práctica para dominar C#. Recomienda descargar el código fuente enlazado en la descripción del vídeo para un aprendizaje práctico.
Creación de una aplicación de demostración de consola
Utilizando Visual Studio, Tim crea un nuevo proyecto de aplicación de consola llamado SimpleHeartbeatService. Aunque podría utilizar una plantilla de proyecto de servicio de Windows, Tim prefiere el enfoque de consola para simplificar la depuración.
"No se trata de qué código pongo aquí, sino de cómo crear el servicio en sí", señala Tim.
¿Qué es un servicio de Windows?
Tim abre la pestaña Servicios en Windows mediante la búsqueda del menú Inicio (basta con escribir "servicios" y pulsar Intro). Explica que los servicios que se ejecutan en segundo plano realizan funciones vitales del sistema operativo, como el escritorio remoto o el servidor MySQL.
El objetivo es crear una nueva entrada en esta lista utilizando código personalizado.
Tipos de proyecto de Visual Studio: Aplicación de consola frente a servicio de Windows
Es posible que tengas la tentación de seleccionar el proyecto Windows Service en Visual Studio, pero Tim explica que es más difícil de depurar. En cambio, una aplicación de consola permite ejecutarla y probarla localmente, lo que reduce la necesidad de conectar un depurador a un servicio en vivo.
"El proyecto de tipo de servicio incorporado dificulta la depuración porque primero hay que instalarlo y luego conectar un depurador"
Añadir Topshelf a través de NuGet
Para simplificar la implementación del servicio, Tim añade Topshelf, un marco de trabajo de código abierto, a través de NuGet. Esta popular biblioteca (con millones de descargas) ayuda a crear servicios de Windows sin código repetitivo.
Pasos:
-
Haga clic con el botón derecho en Referencias
-
Seleccione Gestionar paquetes NuGet
- Buscar e instalar Topshelf
Escribir la lógica del servicio
Tim crea una clase Heartbeat con dos métodos públicos: Start() y Stop(). Dentro del constructor, configura un System.Timers.Timer para que se ejecute cada segundo.
El evento Elapsed de este temporizador agrega la hora actual a un archivo .txt en la carpeta C:\temp\demos. Esto imita una tarea en segundo plano que se ejecuta continuamente.
"Este temporizador escribirá en un archivo de texto cada segundo, mostrando que el servicio está vivo"
Esto simula el funcionamiento de procesos de larga duración en servicios reales, como el escaneado de carpetas o la impresión de documentos.
Servicio de cableado con Topshelf
Con HostFactory.Run, Tim integra Topshelf en la aplicación:
-
Define la clase Heartbeat
-
Mapas de los métodos Start() y Stop()
- Configura el servicio para que se ejecute como LocalSystem, concediendo los permisos necesarios
También establece metadatos para el servicio:
-
Nombre del servicio: HeartbeatService
-
Nombre para mostrar: Heartbeat Service
- Descripción: Utilizado con fines de demostración en un vídeo de YouTube
Ejecutar el servicio como aplicación de consola
Antes de la instalación, Tim ejecuta la aplicación para probarla. El temporizador añade correctamente marcas de tiempo a heartbeat.txt. Utilizando la función de monitorización de Notepad++, muestra actualizaciones en tiempo real.
Instalación y verificación del servicio
Tim copia el .exe y los archivos relacionados de la carpeta bin\Debug a una ubicación permanente (como C:³³demos\HeartbeatService). Utilizando un símbolo del sistema administrativo, ejecuta los siguientes comandos:
SimpleHeartbeatService.exe install
SimpleHeartbeatService.exe start
SimpleHeartbeatService.exe install
SimpleHeartbeatService.exe start
Esto añade el servicio al Gestor de Control de Servicios. Al abrir de nuevo la pestaña Servicios y hacer clic en Actualizar, el servicio ya está visible y en funcionamiento.
"Es muy fácil instalar un servicio, y es muy fácil hacer cosas con un servicio"
Para desinstalar:
SimpleHeartbeatService.exe uninstall
SimpleHeartbeatService.exe uninstall
Recapitulación: Ventajas y consideraciones
Tim recuerda que crear e instalar un servicio con Topshelf es muy sencillo. Sin embargo, advierte de que la escritura infinita de archivos puede provocar problemas de almacenamiento, lo que es un buen recordatorio para una gestión adecuada de los registros.
Ideas de servicio para el mundo real
Tim comparte ideas prácticas para los servicios de Windows:
-
Limpieza de carpetas: Eliminar archivos antiguos de Descargas
-
Organización de imágenes: Ordenar fotos en carpetas por fecha
-
Procesamiento de CSV: Ver una carpeta y auto-importar CSVs en una base de datos
- Automatización del correo electrónico: Supervisar una mesa de ayuda y enviar notificaciones
Estos ejemplos muestran cómo utilizar los servicios para automatizar tareas en segundo plano e integrarlos con herramientas como SQL Server, OneDrive y programadores de tareas.
Reflexiones finales
Tim concluye animando a los desarrolladores a experimentar. Ten cuidado con la memoria, el almacenamiento y el registro de eventos. Si necesita actualizaciones automáticas, ajustes de seguridad o una implementación más robusta, se requerirá una configuración adicional.
"Aquí hay mucha potencia y muchas cosas que puedes hacer"
Conclusión
Gracias a la demostración paso a paso de Tim Corey en su vídeo, la creación de un servicio Windows en C# resulta accesible y práctica. Gracias a Topshelf, una aplicación de consola puede convertirse en un servicio de Windows totalmente funcional con una configuración mínima. Ya se trate de gestionar archivos de registro, manejar eventos de bases de datos o realizar automatizaciones, los servicios ofrecen una forma potente y escalable de crear aplicaciones .NET Framework o .NET Core en tiempo real y en segundo plano.
Utilice este tutorial como camino completo para comprender, crear e instalar servicios de forma eficaz. No olvides realizar pruebas exhaustivas y ejecutar siempre el instalador o el símbolo del sistema como administrador.


