Tutorial: Crear una aplicación de servicios de Windows en el Diseñador de componentes
Nota
La plantilla Servicio de Windows con su funcionalidad asociada no está disponible en Visual Studio Standard.
Los procedimientos de este tema muestran el proceso de creación de una sencilla aplicación de servicios de Windows que escribe mensajes en un registro de eventos. Los pasos básicos que se realizan para crear y usar el servicio son los siguientes:
Crear un proyecto mediante la plantilla de aplicaciones de Servicios de Windows. Esta plantilla crea una clase que hereda de ServiceBase y escribe gran parte del código básico del servicio, como el código que lo inicia.
Escribir el código de los procedimientos OnStart y OnStop, y reemplazar el resto de los métodos que desee volver a definir.
Agregar los instaladores necesarios para su aplicación de servicio. De forma predeterminada, al hacer clic en el vínculo Agregar instalador, se agrega a la aplicación una clase que contiene dos o más instaladores: uno para instalar el proceso y otro para cada uno de los servicios asociados que contiene.
Generar el proyecto.
Crear un proyecto de instalación para instalar el servicio y, a continuación, instalarlo.
Abrir el Administrador de control de servicios de Windows 2000 e iniciar el servicio.
Para empezar, debe crear el proyecto y definir los valores necesarios para que el servicio funcione correctamente.
Nota
Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio incluidos en las instrucciones siguientes. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Valores de configuración de Visual Studio.
Crear un servicio
Para crear y configurar el servicio
En el menú Archivo, haga clic en Nuevo proyecto.
Aparece el cuadro de diálogo Nuevo proyecto.
Seleccione Servicio de Windows en la lista de plantillas de proyecto de Visual Basic o Visual C# y asigne al proyecto el nombre MyNewService. Haga clic en Aceptar.
Nota
La plantilla de proyecto agrega automáticamente una clase de componente, denominada Service1, que hereda de System.ServiceProcess.ServiceBase.
Haga clic en el diseñador para seleccionar Service1. A continuación, en la ventana Propiedades, establezca la propiedad ServiceName y la propiedad (Name) de Service1 en MyNewService.
Agregar características al servicio
En la siguiente sección, va a agregar un registro de eventos personalizado al servicio de Windows. Los registros de eventos no están asociados de ningún modo a los servicios de Windows. Aquí, el componente EventLog se utiliza como ejemplo del tipo de componente que se puede agregar a un servicio de Windows.
Para agregar la funcionalidad de registro de eventos personalizado al servicio
En el Explorador de soluciones, haga clic con el botón secundario del mouse en Service1.vb o Service1.cs y seleccione Diseñador de vistas.
En la ficha Componentes del Cuadro de herramientas, arrastre un componente EventLog hasta el diseñador.
En el Explorador de soluciones, haga clic con el botón secundario del mouse en Service1.vb o Service1.cs y seleccione Ver código.
Agregue o edite el constructor para definir un registro de eventos personalizado.
' To access the constructor in Visual Basic, select New from the ' method name drop-down list. Public Sub New() MyBase.New() InitializeComponent() If Not System.Diagnostics.EventLog.SourceExists("MySource") Then System.Diagnostics.EventLog.CreateEventSource("MySource", "MyNewLog") End If EventLog1.Source = "MySource" EventLog1.Log = "MyNewLog" End Sub
public MyNewService() { InitializeComponent(); if (!System.Diagnostics.EventLog.SourceExists("MySource")) { System.Diagnostics.EventLog.CreateEventSource( "MySource","MyNewLog"); } eventLog1.Source = "MySource"; eventLog1.Log = "MyNewLog"; }
Para definir qué ocurre al iniciar el servicio
En el Editor de código, busque el método OnStart, que fue invalidado automáticamente al crear el proyecto, y escriba código que determine las acciones que se deben realizar al empezar a ejecutar el servicio:
' To access the OnStart in Visual Basic, select OnStart from the ' method name drop-down list. Protected Overrides Sub OnStart(ByVal args() As String) EventLog1.WriteEntry("In OnStart") End Sub
protected override void OnStart(string[] args) { eventLog1.WriteEntry("In OnStart"); }
Nota
Una aplicación de servicio está diseñada para ejecutarse de forma prolongada. Por lo tanto, normalmente sondea o supervisa algún elemento del sistema. La supervisión se puede establecer en el método OnStart. Sin embargo, OnStart no lleva a cabo realmente la supervisión. El método OnStart debe volver al sistema operativo después de que haya comenzado el funcionamiento del servicio. No debe bloquearse ni ejecutar un bucle infinito. Para establecer un mecanismo de sondeo sencillo, utilice el componente System.Timers.Timer. En el método OnStart, debería establecer los parámetros en el componente y, a continuación, establecer la propiedad Enabled en true. El temporizador activaría entonces los eventos periódicamente en el código y, en esos instantes, el servicio podría realizar su control.
Para definir qué debe ocurrir al detener el servicio
En el Editor de código, seleccione el procedimiento OnStop de la lista desplegable Nombre de método, que se invalidó automáticamente al crear el proyecto. Escriba el código para determinar lo que ocurre cuando se detiene el servicio:
Protected Overrides Sub OnStop() EventLog1.WriteEntry("In OnStop.") End Sub
protected override void OnStop() { eventLog1.WriteEntry("In onStop."); }
También puede invalidar los métodos OnPause, OnContinue y OnShutdown para definir un procesamiento adicional para el componente.
Para definir otras acciones para el servicio
Para el método que desee controlar, invalide el método apropiado y defina lo que desea que suceda.
El código siguiente muestra el aspecto del método OnContinue al ser reemplazado:
Protected Overrides Sub OnContinue() EventLog1.WriteEntry("In OnContinue.") End Sub
protected override void OnContinue() { eventLog1.WriteEntry("In OnContinue."); }
Cuando se instala un servicio de Windows se deben ejecutar algunas acciones personalizadas, que se consigue mediante la clase Installer. Visual Studio puede crear estos instaladores específicamente para un servicio de Windows y agregarlos al proyecto.
Para crear los instaladores necesarios para el servicio
En el Explorador de soluciones, haga clic con el botón secundario del mouse en Service1.vb o Service1.cs y seleccione Diseñador de vistas.
Haga clic en el fondo del diseñador para seleccionar el propio servicio, en vez de cualquier elemento de su contenido.
Con el foco en el diseñador, haga clic con el botón secundario del mouse y, a continuación, haga clic en Agregar instalador.
De forma predeterminada, se agrega al proyecto una clase de componente que contiene dos instaladores. El componente se denomina ProjectInstaller, y los instaladores que contiene son el instalador para el servicio y el instalador para el proceso asociado al servicio.
En la vista Diseño de ProjectInstaller, haga clic en ServiceInstaller1 o en serviceInstaller1.
En la ventana Propiedades, asegúrese de que la propiedad ServiceName esté establecida en MyNewService.
En el diseñador, haga clic en ServiceProcessInstaller1 (para un proyecto de Visual Basic) o en serviceProcessInstaller1 (para un proyecto de Visual C#). Establezca la propiedad Account en LocalSystem. Esto hará que se instale el servicio y se ejecute con una cuenta de servicio local.
Nota sobre la seguridad La cuenta LocalSystem tiene amplios permisos, incluida la capacidad para escribir en el registro de eventos. Utilice esta cuenta con precaución porque podría aumentar el riesgo de ataques por parte de software malintencionado. Para otras tareas, considere la posibilidad de usar la cuenta LocalService, que actúa como un usuario sin privilegios en el equipo local y presenta credenciales anónimas a cualquier servidor remoto.
Para generar el proyecto de servicio
En el Explorador de soluciones, haga clic con el botón secundario en el proyecto y, a continuación, haga clic en Propiedades. Aparece el Diseñador de propiedades del proyecto.
En la página Aplicación, en la lista Objeto de inicio, haga clic en MyNewService.
Presione Ctrl+Mayús+B para generar el proyecto.
Ahora que el proyecto se ha generado, puede ser implantado en el sistema. Un proyecto de instalación instalará los archivos del proyecto compilados y ejecutará los instaladores necesarios para ejecutar el servicio de Windows. Para crear un proyecto de instalación completo, deberá agregar el resultado del proyecto (MyNewService.exe) al proyecto de instalación y, a continuación, agregar una acción personalizada para instalar MyNewService.exe. Para obtener más información sobre proyectos de programas de instalación, vea Proyectos de instalación e implementación. Para obtener más información sobre acciones personalizadas, vea Tutorial: Crear una acción personalizada.
Para crear un proyecto de instalación para el servicio
En el Explorador de soluciones, haga clic con el botón secundario en la solución, elija Agregar y haga clic en Nuevo proyecto.
En Plantillas instaladas, expanda Otros tipos de proyectos y, a continuación, expanda Instalación e implementación.
Seleccione Instalador de Visual Studio.
En el panel Plantillas, seleccione Proyecto de instalación. Asigne al proyecto el nombre MyServiceSetup. Haga clic en Aceptar.
Se agregará un proyecto de instalación a la solución.
A continuación, deberá agregar el resultado del proyecto de servicio de Windows (MyNewService.exe) a la instalación.
Para agregar MyNewService.exe al proyecto de instalación
En el Explorador de soluciones, haga clic con el botón secundario en MyServiceSetup, elija Agregar y, a continuación, haga clic en Resultados del proyecto.
Aparecerá el cuadro de diálogo Agregar grupo de resultados del proyecto.
MyNewService aparece seleccionado en el cuadro Proyecto.
En la lista, seleccione Resultado principal y haga clic en Aceptar.
Se agrega al proyecto de instalación un elemento del proyecto para el resultado principal de MyNewService.
Ahora, agregue una acción personalizada para instalar el archivo MyNewService.exe.
Para agregar una acción personalizada al proyecto de instalación
En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto de instalación, elija Ver y haga clic en Acciones personalizadas.
Aparece el editor de Acciones personalizadas.
En el editor de Acciones personalizadas, haga clic con el botón secundario en el nodo Acciones personalizadas y haga clic en Agregar acción personalizada.
Aparecerá el cuadro de diálogo Seleccionar elemento en el proyecto.
Haga doble clic en la opción Carpeta de la aplicación de la lista para abrirla, seleccione Resultado principal de MyNewService (activo) y haga clic en Aceptar.
El resultado principal se agrega a los cuatro nodos de las acciones personalizadas: Instalar, Confirmar, Revertir y Desinstalar.
En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto MyServiceSetup y haga clic en Generar.
Para instalar el servicio de Windows
Para instalar MyNewService.exe, haga clic con el botón secundario del mouse en el proyecto de instalación en el Explorador de soluciones y seleccione Instalar.
Siga los pasos del Asistente para proyectos de instalación. Genere y guarde la solución.
Para iniciar y detener el servicio
Para abrir el Administrador de control de servicios en Windows 7, Windows Vista y Windows Server, haga clic con el botón secundario en Equipo en el menú Iniciar y, a continuación, haga clic en Administrar. En el cuadro de diálogo Administración de equipos, expanda el nodo Servicios y Aplicaciones en el recuadro izquierdo. Haga clic en Servicios.
Podrá ver el servicio MyNewService en la lista de la sección Servicios de la ventana.
Seleccione su servicio en la lista, haga clic en él con el botón secundario y luego haga clic en Iniciar.
Haga clic con el botón secundario en el servicio y, a continuación, haga clic en Detener.
Para comprobar el registro de eventos del servicio
Vaya al Explorador de servidores y busque el nodo Registros de eventos.
Nota
La plantilla Servicio de Windows con su funcionalidad asociada no está disponible en Visual Studio Standard.
Busque la entrada correspondiente a MyNewLog y expándala. Aparecerán las entradas correspondientes a las acciones realizadas por el servicio.
Para desinstalar el servicio
- En el menú Inicio, abra el Panel de control, haga clic en Agregar o quitar programas, busque el servicio y haga clic en Desinstalar.
Pasos siguientes
Podría probar también el uso de un componente ServiceController para enviar comandos al servicio instalado.
Puede usar un instalador para crear un registro de eventos al instalar la aplicación, en lugar de crearlo cuando se ejecuta la aplicación. Además, el instalador eliminará el registro de eventos cuando se desinstale la aplicación.
Vea también
Tareas
Cómo: Agregar instaladores a una aplicación de servicio
Cómo: Instalar y desinstalar servicios
Cómo: Depurar aplicaciones de servicios de Windows
Referencia
Cómo: Tener acceso e inicializar el Explorador de servidores o el Explorador de bases de datos
Conceptos
Introducción a las aplicaciones de servicios de Windows