Desarrollando un Windows Service

Durante muchos proyectos en mi vida me encontrado con la necesidad de desarrollar un programa que funcione al arrancar Windows sin la necesidad de iniciar sesión y eso es presisamente lo que es un Windows Service.

Y también en el pasado trate de lidiar con el desarrollo de este tipo de aplicaciones en el FrameWork 1.1, y si bien era mucho mas sencillo de hacer de lo que fue por mucho tiempo ahora es mucho mas que eso con el FrameWork 2.0. Lo primero que tendrias que hacer es abrir el Visual Studio 2005 y crear un nuevo proyecto utilizando el template llamado Windows Service que esta entre los proyectos de Tipo Windows.

Esto creara todo el código que necesitas para empezar a desarrollar un servicio windows.

Como podras darte cuenta te creo una clase llamada Service1 por default. Aqui lo importante es darse cuenta que la misma hereda de la clase ServiceBase, la cual provee las caracteristicas de una aplicación de este tipo.
Ahora lo que tendrias que hacer es agregar el codigo qe deseas se este ejecutando en el metodo OnStart.

Lo siguiente que deberas hacer es sobre el dessigner de Service1.cs (si estas viendo el codigo presiona boton derecho sobre el mismo y selecciona la opción de ver dessigner) deberas presionar boton derecho y seleccionar la opción de Add Installer lo cual agrega dos clases sobre un archivo que se llama ProjectInstaller.cs aqui deberas configurar las propiedades de dichos objetos para indicar el como funcionara tu servicio.

El primero el serviceInstaller tiene 2 propiedades en las que deberas prestar inicialmente atención en una que se llama ServiceName y la otra que se llama StartType. ServiceName indicara como sera nombrado tu servicio para que pueda ser identificado en el administrador de servicios. Y el segundo indica como iniciara su ejecución. Si esta debera ser arrancada manualmente o arrancara de manera automativa e inclusive la podras marcar como deshabilitada.

En el serviceProccessInstaler deberas fijarte en la propiedad Account que indica que usuario utilizara para ejecutarse.

Lo siguiente que deberias hacer es agregar un proyecto de instalacion el cual agregara desde el menu File->Add->New Project y sobre el Tipo de Proyectollamado Otros Tipos de Proyectos se encuentra una opción llamada Setup and Deployment ahi deberas escojer el Template de Setup Wizard(Asistente de Configuración).

En la segunda ventana deberas escojer la primera opcion qie dice Crear una aplicacion de setup para una aplicación de windows.

Y en la tercera deberas marcar la opción de Primary output form WindowsService2.

Deberas darle siguiente, siguiente y finalizar.

Por ultimo deberas seleccionar el Proyecto de Setup que te creo el Instalador y sobre el solution explorer (Explorador de Soluciones) deberas encontrar un icono que se llama Custom Actions (Acciones personalizadas) y presionarlo.

Posteriormente deberas presionar boton derecho sobre la raiz que te mostrara y seleccionaras la opción de add custom action (agregar acción presonalizada) despues presionaras sobre Application Folder (Folder de la Aplicación) y por ultimo seleccionaras la opción Primary Output from NombreDelProyectoDelServicio (Active) (Salida primaria de NombreDelProyectoDelServicio(Activo), no estoy tan seguro de esta traducción pero es algo por el estilo) y presionas Ok.

Para finalizar ejecutas el Build (Compilar) sobre la solución y apartir de ese momento puedes instalar y probar el servicio.

Debes recordar que una vez instalado tu servicio no se ejecutara automaticamente así que deberas de ir al Panel de Control y despues a las herramientas administrativas y por ultimo a servicios. Buscar el nuevo servicio y darle iniciar.

En el caso que en la clase serviceInstaler le indicaste la propiedad StartType con el valor de Automatico tu servicio se arrancara automaticamente al iniciar Windows.

Espero este articulo les sea de utilidad.

Saludos. P.D. Una disculpa por estar traduciendo las opciones pero actualmente utilizo el Visual Studio en Ingles.

One thought to “Desarrollando un Windows Service”

  1. Gracias Raúl… me fue muy útil.

    Una pregunta, ¿se puede hacer que se inicie automáticamente el servicio después de instalarlo?

    Desde ya, muchas gracias.
    Fernando.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.