Compartir a través de


Introducción a las aplicaciones de servicio de Windows

Nota:

Este artículo no se aplica a los servicios hospedados en .NET. Para obtener el contenido más reciente sobre los servicios de Windows mediante Microsoft.Extensions.Hosting.BackgroundService y la plantilla de servicio de trabajador, consulte:

Los servicios de Microsoft Windows, anteriormente conocidos como servicios NT, permiten crear aplicaciones ejecutables de larga duración que se ejecutan en sus propias sesiones de Windows. Estos servicios se pueden iniciar automáticamente cuando se inicia el equipo, se pueden pausar y reiniciar y no mostrar ninguna interfaz de usuario. Estas características hacen que los servicios sean ideales para su uso en un servidor o cuando necesite una funcionalidad de larga duración que no interfiera con otros usuarios que trabajan en el mismo equipo. También puede ejecutar servicios en el contexto de seguridad de una cuenta de usuario específica diferente del usuario que ha iniciado sesión o la cuenta de equipo predeterminada. Para obtener más información sobre los servicios y las sesiones de Windows, consulte la documentación de Windows SDK.

Puede crear fácilmente servicios mediante la creación de una aplicación instalada como servicio. Por ejemplo, supongamos que desea supervisar los datos del contador de rendimiento y reaccionar a los valores de umbral. Puede escribir una aplicación de servicio de Windows que escuche los datos del contador de rendimiento, implemente la aplicación y empiece a recopilar y analizar datos.

El servicio se crea como un proyecto de Microsoft Visual Studio, definiendo código dentro de él que controla qué comandos se pueden enviar al servicio y qué acciones se deben realizar cuando se reciben esos comandos. Los comandos que se pueden enviar a un servicio incluyen iniciar, pausar, reanudar y detener el servicio; También puede ejecutar comandos personalizados.

Después de crear y compilar la aplicación, puede instalarla ejecutando la utilidad de línea de comandos InstallUtil.exe y pasando la ruta de acceso al archivo ejecutable del servicio. A continuación, puede usar el Administrador de control de servicios para iniciar, detener, pausar, reanudar y configurar el servicio. También puede realizar muchas de estas mismas tareas en el nodo Servicios del Explorador de servidores o mediante la ServiceController clase .

Aplicaciones de servicio frente a otras aplicaciones de Visual Studio

Las aplicaciones de servicio funcionan de forma diferente de muchos otros tipos de proyecto de varias maneras:

  • El archivo ejecutable compilado que crea un proyecto de aplicación de servicio debe instalarse en el servidor para que el proyecto pueda funcionar de forma significativa. No puede depurar o ejecutar una aplicación de servicio, presione las teclas F5 o F11; no puede ejecutar inmediatamente un servicio o depurar paso a paso el código por instrucciones. En su lugar, debe instalar e iniciar el servicio y, después, asociar un depurador al proceso del servicio. Para obtener más información, vea Cómo: Depurar aplicaciones de servicio de Windows.

  • A diferencia de algunos tipos de proyectos, debe crear componentes de instalación para aplicaciones de servicio. Los componentes de instalación instalan y registran el servicio en el servidor y crean una entrada para el servicio con el Administrador de control de servicios de Windows. Para obtener más información, consulte How to: Add Installers to Your Service Application(Cómo: Agregar instaladores a la aplicación de servicio).

  • El Main método de la aplicación de servicio debe emitir el comando Ejecutar para los servicios que contiene el proyecto. El Run método carga los servicios en el Administrador de control de servicios en el servidor adecuado. Si usa la plantilla de proyecto servicios de Windows , este método se escribe automáticamente. Tenga en cuenta que cargar un servicio no es lo mismo que iniciar el servicio. Consulte "Duración del servicio" a continuación para obtener más información.

  • Las aplicaciones de servicio de Windows se ejecutan en una estación de ventana diferente a la estación interactiva del usuario que ha iniciado sesión. Una estación de ventana es un objeto seguro que contiene un Portapapeles, un conjunto de átomos globales y un grupo de objetos de escritorio. Dado que la estación del servicio de Windows no es una estación interactiva, los cuadros de diálogo generados desde dentro de una aplicación de servicio de Windows no se verán y pueden hacer que el programa deje de responder. De forma similar, los mensajes de error deben registrarse en el registro de eventos de Windows en lugar de generarse en la interfaz de usuario.

    Las clases de servicio de Windows compatibles con .NET Framework no admiten la interacción con estaciones interactivas, es decir, el usuario que ha iniciado sesión. .NET Framework tampoco incluye clases que representan estaciones y escritorios. Si el servicio de Windows debe interactuar con otras estaciones, deberá acceder a la API de Windows no administrada. Para obtener más información, consulte la documentación de Windows SDK.

    La interacción del servicio de Windows con el usuario u otras estaciones debe diseñarse cuidadosamente para incluir escenarios como que no haya ningún usuario que haya iniciado sesión o que el usuario tenga un conjunto inesperado de objetos de escritorio. En algunos casos, puede ser más adecuado escribir una aplicación de Windows que se ejecute bajo el control del usuario.

  • Las aplicaciones de servicio de Windows se ejecutan en su propio contexto de seguridad y se inician antes de que el usuario inicie sesión en el equipo Windows en el que están instalados. Debe planear cuidadosamente en qué cuenta de usuario ejecutar el servicio; un servicio que se ejecuta en la cuenta del sistema tiene más permisos y privilegios que una cuenta de usuario.

Duración del servicio

Un servicio pasa por varios estados internos a lo largo de su vida útil. En primer lugar, el servicio se instala en el sistema en el que se ejecutará. Este proceso ejecuta los instaladores para el proyecto de servicio y carga el servicio en el Administrador de control de servicios para ese equipo. El Administrador de control de servicios es la utilidad central proporcionada por Windows para administrar servicios.

Después de que se haya cargado el servicio, debe iniciarse. Iniciar el servicio le permite empezar a funcionar. Puede iniciar un servicio desde el Administrador de control de servicios, desde el Explorador de servidores o desde el código llamando al Start método . El Start método pasa el procesamiento al método de OnStart la aplicación y procesa cualquier código que haya definido allí.

Un servicio en ejecución puede permanecer en este estado indefinidamente hasta que se detenga, se pause o el equipo se apague. Un servicio puede existir en uno de los tres estados básicos: Running, Pausedo Stopped. El servicio también puede notificar el estado de un comando pendiente: ContinuePending, PausePending, StartPendingo StopPending. Estos estados indican que se ha emitido un comando, como un comando para pausar un servicio en ejecución, pero aún no se ha llevado a cabo. Puede consultar Status para determinar en qué estado está un servicio o usar WaitForStatus para llevar a cabo una acción cuando se produzca cualquiera de estos estados.

Puede pausar, detener o reanudar un servicio desde el Administrador de control de servicios, desde el Explorador de servidores o llamando a métodos en el código. Cada una de estas acciones puede llamar a un procedimiento asociado en el servicio (OnStop, OnPauseo OnContinue), en el que puede definir procesamiento adicional que se realizará cuando el servicio cambie el estado.

Tipos de servicios

Hay dos tipos de servicios que puede crear en Visual Studio mediante .NET Framework. A los servicios que son el único servicio de un proceso se les asigna el tipo Win32OwnProcess. A los servicios que comparten un proceso con otro servicio se les asigna el tipo Win32ShareProcess. Puede recuperar el tipo de servicio consultando la ServiceType propiedad .

Es posible que ocasionalmente vea otros tipos de servicio si consulta los servicios existentes que no se crearon en Visual Studio. Para más información sobre ellos, consulte ServiceType.

Servicios y el componente ServiceController

El ServiceController componente se usa para conectarse a un servicio instalado y manipular su estado; mediante un ServiceController componente, puede iniciar y detener un servicio, pausar y continuar su funcionamiento y enviar comandos personalizados a un servicio. Sin embargo, no es necesario usar un ServiceController componente al crear una aplicación de servicio. De hecho, en la mayoría de los casos, el ServiceController componente debe existir en una aplicación independiente de la aplicación de servicio de Windows que define el servicio.

Para obtener más información, consulte ServiceController.

Requisitos

Consulte también