Servicios Windows instalables

gear Aquí va un pequeño How-to rápido de como se crea e instala un servicio Windows con .NET y Visual Studio 2005 dedicado a mi compañero Juanma Otero que a cambio me explicará como funcionan los EndPoints de SQL Server 😀

Cada vez que vayamos a crear un servicio Windows, podemos seguir estos pasos para crear lo que sería el contenedor y su capacidad de instalación, para luego más tranquilamente empezar a introducir la lógica y funcionalidad del negocio que le queramos dar.

 

1. Creando.

empezando Se utiliza un proyecto Windows Service, que digamos es un contenedor en el que tenemos que implementar las acciones básicas de un servicio como son Start, Stop, Pause, Restar… etc.. En un próximo artículo me meteré un poco más a fondo en el tema de la implementación , como usar el EventLog… etc.. etc..

 

 

 

2. Haciéndolo instalable.

InstallerClass Añadimos al proyecto una Installer Class desde el menu “Add New Item”, que nos provee la funcionalidad de instalación. Hay dos componentes que no están en la paleta que nos hacen falta, aunque se puede hacer “a pelo” … siempre los añado…

 

 

 

 

 

componentes Añadimos a la paleta de componentes las clases ServiceInstaller y ServiceProcessInstaller . Añadimos estos componentes al diseñador de la clase instaladora y los configuramos. No hay mucho que configurar 😛

 

 

 

ServiceInstaller En el ServiceInstaller, configuramos el nombre que mostrará, la descripción, el nombre por el que invocaremos al servicio y el tipo incio. Ponemos que el “Parent” es la clase InstallerClass.

 

 

 

 

 

ServiceProcessInstaller En el ServiceProcessInstaller configuramos la cuenta de usuario con la que se ejecutará el servicio, por lo general LocalService que es una cuenta con pocos privilegios. Ponemos que el “Parent” es la clase instaladora.

 

 

 

 

3. El instalador.

Instalador Añadimos al a solución un proyecto “Setup Project” que nos provee de la funcionalidad de un asistente instalador.

 

 

 

 

 

addprojectoutput Dentro de este proyecto, vamos al “File System Editor” y en “Application Folder” le decimos “Add Project Output”, seleccionamos “Primary Output”, nuestro proyecto en el combo y configuracion (Active) (para que use la que nosotros usemos … Debug ó Release).

 

 

 

 

 

actionsoutput Ahora vamos al “Custom Actions Editor” y directamente sobre el elemento “Custom Actions” añadimos la salida del proyecto que hemos puesto en “Application Folder”.

 

 

 

 

4. Instalando.

Install Construimos la solución y el proyecto de instalación, este último genera un paquete .msi y un .exe asociado, con eso ya se puede instalar por ahí 😀 pero para trabajar en desarrollo nada más comodo que botón derecho e Install 😉

 

 

 

Lo instalamos y vemos que ya aparece en nuestra consola de administración de servicios. Podemos iniciarlo, pararlo, reiniciarlo… etc…

mmc

5. Haciendo que se inicie automáticamente al instalarlo.

Si, aunque se configure que debe iniciarse automáticamente… eso será en el próximo reinicio de la máquina. Para que se inicie automáticamente la primera vez … nos suscribimos al evento AfterInstall del componente ServiceInstaller que añadimos a la clase instaladora y hacemos que el servicio arranque con ServiceController:

private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
{
  using (ServiceController svc = new ServiceController("MiServicio"))
    svc.Start();
}

Con esto una vez el servicio este instalado automáticamente se iniciará.

Ahora podemos ponernos manos a la obra en integrar nuestra lógica dentro del servicio. Yo por comodidad… creo un proyecto “Console Application” normal para desarrollo y primeras pruebas, cuando ya esta todo listo… integro los ensamblados en el servicio, pero bueno… “cada maestrillo tiene su librillo…” 🙂

vtortola.Net | Servicios Windows Instalables

2 comentarios en “Servicios Windows instalables”

  1. Hola,

    Veo que en tu ejemplo basta con crear el instalador para que el servicio se instale automáticamente; pero ¿esto funciona realmente?, con Visual Studio 2005, el instalador que solamente (instala) los programas a la carpeta de destino; para instalar el servicio en el administrador de servicios hay que utilizar la utilidad InstallUtil.exe que viene con el SDK de .NET Framework.

    Si sabes una forma que realmente cree un instalador que además de copiar los programas a la carpeta de destino, instale el servicio en el administrador de Servicios, estaría bien si lo compartieras. Gracias

    Federico Luna

  2. Acabo de mandar un mensaje donde comentaba que no me había funcionado el programa de instalación; me retracto, sí funciona bien, ha sido un error visual mío.

    Gracias

    Federico Luna

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *