CREANDO UN SERVICIO DE WINDOWS CON C#

 LINK:CREANDO UN SERVICIO DE WINDOWS CON  VISUAL BASIC 

Me encuentro escribiendo este nuevo artículo para todos los lectores de esta página.

Este articulo trata de cómo crear un servicio de Windows con Visual Studio en esta ocasión los explicare con C# espero  a alguien le pueda servir.

 

Lo primero que necesitamos hacer es agregar un nuevo proyecto  pero esta ves seleccionaremos un servicio de Windows.

 

Servicio de Windows

 

Se abra creado  nuestro proyecto. Para hacer que funcione nuestro Servicio es necesario Instalarlo en el Sistema, por lo cual nuestro siguiente paso es agregar un instalador a nuestro servicio.

 Para este paso deberemos darle click derecho dentro de la parte del formulario de nuestro Servicio y aparecerá una pantalla  en la cual daremos click en Agregar Instalador.

 

Agregando Instalador

 

Se crearan dos componentes al agregar nuestro instalador que son los siguientes

 

Componentes

 

Hasta estos momentos contaremos con dos clases:

ProjectInstaller

 Service1

 Nota: Podrán cambiar el nombre de sus clases, para mayor entendimiento las dejare como las da por defecto, hasta estos momentos todos deberemos de contar con estos elementos en nuestro explorador de soluciones.

 

Explorador

 

 

Solo nos ara falta agregar un ultimo elementó a nuestro proyecto, este elemento es conocido como timer. No es el timer que nos da por defecto Visual Studio, este timer se deberá de agregar como un elemento a nuestro cuadro de herramientas.

 Lo primero que deberemos hacer es colocarnos en el cuadro de herramientas de nuestro proyectó, daremos click derecho y seleccionaremos la opción de Elegir Elementos.

 

Caja de Herramientas

 

Nos aparecerá  una pantalla de componentes donde deberemos de agregar el elemento timer, con el espacio de nombres  System.Timers, lo seleccionamos y damos click en aceptar.

Se abra agregado nuestro componente a nuestra caja de herramientas.

 

Se agrego nuestro Componente

 

Ya habremos agregado todos los elementos para que funcione nuestro Windows Services ahora empecemos a programarlo para que funcione. Empecemos con el código del Instalador.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;

namespace WindowsService1
{
    [RunInstaller(true)]
    public partial class ProjectInstaller : Installer
    {
        public ProjectInstaller()
        {
            InitializeComponent();
           
            //Agregue el código de inicialización después de llamar a InitializeComponent
        }
    }
}

Lo primero que debemos de hacer es importar la clase System.ServiceProcess

using System.ServiceProcess;

Después de eso debemos de indicar de qué forma arrancara el servicio.

ServiceProcessInstaller proceso = new ServiceProcessInstaller();

proceso.Account = ServiceAccount.LocalService; 

Puedes arrancar el servicio de las siguientes Formas

Servicio Local

Sistema Local

Servicio de Red

Usuario

 

Arrancare de Forma

 

Después de indicar la forma en la que se Registrara el Servicio, es necesario indicar como se va iniciar el proceso de la siguiente forma:

ServiceInstaller servicio = new  ServiceInstaller();
servicio.StartType = ServiceStartMode.Automatic; 

Los servicios se pueden iniciar de la siguiente forma:

Automática:   

Deshabilitada:

Manual:

 

Proceso Arrancara

 

Después de indicar de que forma inicializara y en  que forma correrá es necesario indicarle un nombre a nuestro servicio de la siguiente forma.

 servicio.ServiceName="MyServicio";
 servicio.DisplayName ="MyServicio";

 Una ves indicando los detalles de nuestro servicio como ultimo paso agregamos nuestros objetos a el instalador.

 Installers.Add(proceso);
 Installers.Add(servicio);

Hemos acabado de programar nuestro instalador, este es el código completo de lo que acabamos de hacer.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;

namespace WindowsService1
{
    [RunInstaller(true)]
    public partial class ProjectInstaller : Installer
    {
        public ProjectInstaller()
        {
            InitializeComponent();
            ServiceProcessInstaller proceso = new ServiceProcessInstaller();
            ServiceInstaller servicio =new  ServiceInstaller();
            proceso.Account = ServiceAccount.LocalService;
            servicio.StartType = ServiceStartMode.Automatic;
            servicio.ServiceName="MyServicio";
            servicio.DisplayName ="MyServicio";
            Installers.Add(proceso);
            Installers.Add(servicio);
                      
        }
    }
}

Ahora necesitamos programar lo que hará nuestro servicio, este es el código sin programar de nuestro servicio.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;

namespace WindowsService1
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            // TODO: agregar código aquí para iniciar el servicio.
        }

        protected override void OnStop()
        {
            // TODO: agregar código aquí para realizar cualquier anulación necesaria para detener el servicio.
        }
    }
}

Recuerdan que agregamos un Timer a nuestro Formulario de nuestro Servicio, pues es momento de hacer doble click en el para programar dentro del evento Timer_Elapsed

este es el código de nuestro servicio.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;

namespace WindowsService1
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            // TODO: agregar código aquí para iniciar el servicio.
        }

        protected override void OnStop()
        {
            // TODO: agregar código aquí para realizar cualquier anulación necesaria para detener el servicio.
        }

        private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {

        }
    }
}

 Hasta este momento es hora de que utilicen su imaginación para hacer los servicio que quieran, estos son los pasos a seguir para los servicio, puedes hacer servicios que hagan que se inicialicé una aplicación cada determinada hora o que se yo,  yo voy a crear como termino de mi ejemplo un servicio sencillo que me muestre la calculadora un tiempo determinado, este será al código.

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;

namespace WindowsService1
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            timer1.Interval = 5400;
            timer1.Start();
                                 
        }

        protected override void OnStop()
        {
            timer1.Stop();
        }

       private void timer1_Elapsed_1(object sender, System.Timers.ElapsedEventArgs e)
        {

            Process.Start("calc.exe");
        }
    }
}

Después de tener el código de nuestro proyecto Finalizado, simplemente lo ejecutamos para que nos genere nuestro archivo (.exe)

 

 

Abrimos el Símbolo del Sistema de Visual Studio.

 

Simbolo del Sistema

 

Y dentro del símbolo del Sistema instalamos nuestro servicio, con el comando InstallUtil “path”.

 El path es la ruta completa de donde se encuentra el archivo .exe de nuestro proyecto que anteriormente creamos.

 

Path de nuestra Aplicacion

 

Después de Instalar nuestro Servicio nos vamos al panel de control, Herramientas Administrativas y buscamos servicio, comprobamos si nuestro servicio se encuentra ahí, el servicio se debe de llamar como lo pusimos en la clase de Instalación de un principio, recuerden que el nombre era MyServicio.

 

Vemos nustro Servicio Instalado

 

Recuerden que  lo declaramos que iba arrancar de forma local e iba iniciar de forma automática, simplemente nos queda iniciarlo.

 

Iniciando Nuestro Servicio

 

Después de Iniciar nuestro servicio Se estará ejecutando como el tiempo que declaramos en el timer.Interval

Nota:Para controlar el tiempo de su servicio solo cambien el tiempo en el atributo del Timer.Interval. 


Espero a alguien le halla servido este pequeño articulo.Sonriente

 

Comentarios
Añadir nuevoBuscar
Noel - Como ejecutar programa desde a Unregistered | 2009-03-24 10:54:57
amigo, te escribe alguien que ha logrado hacer lo que tu articulo dice pero necesito ejecutar un programa desde un servicio, no he logrado hacerlo, repondeme a mi correo noelcarlos.perez@gmail.com

saludos
Jorge - servcio windows Unregistered | 2009-09-23 09:27:59
por favor nrcesito ejecutar una aplicacion desde un servicio windows de forma que se me vea la pantalla, o sea de forma no oculta. por favor cual quier cosa al e-mail: jgaguancela@hotmail.com
Majo - servicio windows Unregistered | 2009-11-06 07:19:42
Para que se vea en pantalla la aplicacion que queres ejecutar, tenes que marcar el tilde de 'permitir que interactue con el escritorio' en las Propiedades del Servicio (desde el panel de control)
Jorge - Servicio windows 2003 Unregistered | 2009-12-09 15:33:28
en maquinas con xp me funciona muy bien, pero al instalar en un servidor con windows server 2003 no me aparece la aplicacion. por favor ayuda
Jorge - re: Servicio windows 2003 Unregistered | 2009-12-09 15:36:26
Jorge escribi?b>
en maquinas con xp me funciona muy bien, pero al instalar el servicio en un servidor con windows server 2003 no me aparece la aplicacion. por favor ayuda

ya hice de activar la el tilde "Interactuar con el escritorio" solo le puedo ver en la lista de procesos
Maggy - Ayuda Por favor!!!! Unregistered | 2009-11-09 19:01:19
Hola a todos
Yo quiero hacer lo mismo que noel(ejecutar un programa desde un seervicio) y viceversa es decir que al ejcutar el programa avtive el servicio si pudieran ayudarme se los agradeceria mucho mi correo es medinamagy@yahoo.com.mx
de antemano gracias a todos
Anonimo Unregistered | 2009-11-17 16:51:58
ayuda please
Peter - RE Unregistered | 2009-12-09 17:12:32
Hola Maggy y Jorge para ejecutar tu proyecto dentro de la carpeta bin debug se encuentra un .exe llamado como nombraste a tu proyecto ese .exe lo necesitas madar a llamar como el ejemplo de aqui

Process.Start("ruta de tu .exe");

si no funcionan me lo comentan y posteo el codigo suerte
Jorge - No Funciona en el servidor win Unregistered | 2009-12-10 10:10:07
mi servicio como ejemplo solo quiero que me abra la calculadora, estoy instalando en servicio windows deforma remota en un servidor windows 2003 server, como lo hacia en pc con windows xp, se me instala correctamente, por lo que le puedo ver a mi servicio en la lista, activo para que interatue con el escritorio e inicio el servicio, pero no le veo a la calculadora, voy al daminitrador de tareas y el proceso si esta, le elimino el proceso de la calculadora y me sube nuevamente pero no le veo la calculadora, en teoria el servicio funciona bien, pero no le veo la calculadora, no se que permisos necesite para ver la aplicacion ya que con el usuario que entro pertenece al grupo de administradores.
ya no se que hacer. por favor ayuda
Escribir comentario
Nombre:
Tí­tulo:
Código UBB:
[b] [i] [u] [url] [quote] [code] [img] 
 

Powered by JoomlaCommentCopyright (C) 2006 Frantisek Hliva. All rights reserved.Homepage: http://cavo.co.nr/

 
 
Descargas
  

Cursos
Microsoft LINQ
  

Silverlight
  

Base de Datos
  

Ajax
  

Crear Graficas
        

Crystal Reports
  

  VicoNet