miércoles, 15 de julio de 2009

¿Cómo hacer un Servicio Windows en C#?

Los servicios Windows son programas que corren en background independiente del usuario que tenga sesiones activas en un server. Son usamos para múltiples tareas administrativas, no es una aplicación normal de Windows, ya que no tiene interfaz gráfica.



Crear el proyecto.
1. En el menu File, click en New Project
---- La venta de New Project se abrira

2. Seleccione el projecto Windows Service de la lista de C#, coloque el nombre de MyNewService. y luego OK.

--- ser creara Service1.cs

3. Sobre el diseñador de service1 precione clic derecho y propiedades sobre Service1, el la ventana de propiedades busque la propiedad Service Name y cambielo por MyService
y asegurese que la opcion autolog este en true.

3.1 Que alla cambiado el nombre del servicio en la ventan de propiedades no sigmifica que el nombre de la clase tambien cambiara, tendra que renombrar la clase desde el Solucion explorer precionando click derecho sobre el servicio y luego rename y colocando el nombre MyNewService.

4. Sobre el diseñador de MyNewService precione clic derecho view Code.

Tendra 3 void
MyNewService() ---------------es el constructor
OnStart(string[] args)--------es el evento que se disparar cuando inicie el componente
OnStop()-----------------------es el evento que se disparar cuando pare el componente




Agregando Caracteristicas al Componente
En los siguientes pasos vamos agregar codigo para escribir en el log de windows nuestras actidades


Pero primero necesitamos agregar un evenLog del toolbox

5. En el costructor crearemos en el una entrada en el log de windows para poder ingresar entradas en log.

public MyNewService()
{
InitializeComponent();
if (!System.Diagnostics.EventLog.SourceExists("MySource"))
{
System.Diagnostics.EventLog.CreateEventSource(
"MySource","MyNewLog");
}

eventLog1.Source = "MySource";
eventLog1.Log = "MyNewLog";
}

6. Ahora vamos a definir que ocurre cuando el servicio inicia, en el editor de codigo buscar el evento OnStart y pondremos la entrada al log.

protected override void OnStart(string[] args)
{
eventLog1.WriteEntry("In OnStart");
}

7. Ahora vamos a definir que ocurre cuando el servicio es detenido, en el editor de codigo buscar el evento OnStop y pondremos la entrada al log.

protected override void OnStop()
{
eventLog1.WriteEntry("In onStop.");
}

hay otro evento pero ese no lo capturaremos se llama Oncontinue y se dispara cuando el servicio es detenido y luego puesto en marcha de nuevo.
Ver mas info aquí

Ahora es momento de Instalarlo.
8. Sobre el modo diseño del servicio precione click en add Instaler
esto llevara unos minutos.

Compile y ctl + shif + b o en el menu build
este generara MyNewService.exe

Intalarlo en el server.
se puede hacer de 2 maneras la facil y la dificil
1.) hacer un instalador.
2.) la facil que es la que voy a mostrarles

a.)Copie su proyecto compilado al servidor.
b.)En el servidor donde van a poner su servicio ingrese a una consola de Microsoft Windows SDK - CMD Shell
c.)por medio de commando de dos(cd .. , c:\algo) dijijase a la carpeta bin y debug o release hasta que encuente su exe

d.)installutil MyNewService.exe
Esto instalara en windows service, ahora ya esta instalado su servicio.
para quitarlo

installutil /u MyNewService.exe

En la face 2 pondremos un timer para que se ejecute cada cierto tiempo un evento.

6 comentarios:

Mayra Lizbeth dijo...

Que tal, muy bueno tu ejemplo, pero dónde está la fase dos que comentas donde pones el timer. Saludos.

Carlos Juan dijo...

Aquí tienes la dirección del ejemplo del timer.

http://www.cjorellana.net/2009/07/como-hacer-un-servicio-windows-en-c-con.html

Unknown dijo...

Buen dia Muchisimas gracias por tu aporte pero al seguir cada uno de los pasos que muestras en el tema
cuando trato de instalarlo me aparece

Este ensamblado se creo con un timepo de ejecucion mas reciente que el tiempo de ejecucion cargado actualmente y no se puede cargar


como soluciono eso ?

de antemano gracias

Carlos Juan dijo...

El SDK que tenes en tu maquina donde desarrollaste es mas nuevo que el que esta en el servidor.

2 Soluciones

1.) Instalas la misma versión de tu maquina en el server

2.) instalas en tu maquina la misma versión del server

el chiste es que coincidan.

Unknown dijo...

si efectivamente eso me comentaron :P de igual modo muchísimas gracias me ha sido de muchísima ayuda tu aporte

Unknown dijo...
Este comentario ha sido eliminado por el autor.