none
Servicios Windows RRS feed

  • Pregunta

  • Hola:

    Estoy siguiendo el tutorial de crear servicio para probar que nunca he creado uno.

    Tutorial: Crear una aplicación de servicios de Windows en el Diseñador de componentes.

    Los código la verad no se seguirlo, me dan errores por todas partes.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Linq;
    using System.ServiceProcess;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace MyNewService
    {
        public partial class MyNewService : ServiceBase
        {
            private System.ComponentModel.IContainer components;
            private System.Diagnostics.EventLog eventLog1;
    
            private int eventId = 1;
    
            public MyNewService()
            {
                InitializeComponent();
                eventLog1 = new System.Diagnostics.EventLog();
                if (!System.Diagnostics.EventLog.SourceExists("MySource"))
                {
                    System.Diagnostics.EventLog.CreateEventSource(
                        "MySource", "MyNewLog");
                }
                eventLog1.Source = "MySource";
                eventLog1.Log = "MyNewLog";
            }
    
            protected override void OnStart(string[] args)
            {
                eventLog1.WriteEntry("In OnStart");
            }
            
    
            // Set up a timer to trigger every minute.  
            System.Timers.Timer timer = new System.Timers.Timer();
            timer.Interval = 60000; // 60 seconds  
            timer.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimer);
            timer.Start();
    
                public void OnTimer(object sender, System.Timers.ElapsedEventArgs args)
            {
                // TODO: Insert monitoring activities here.  
                eventLog1.WriteEntry("Monitoring the System", EventLogEntryType.Information, eventId++);
            }
    
            protected override void OnStop()
            {
                eventLog1.WriteEntry("In onStop.");
            }
    
            protected override void OnContinue()
            {
                eventLog1.WriteEntry("In OnContinue.");
            }
        }
    }
    

    ¿Alguna idea?

    Saludos.


    http://electronica-pic.blogspot.com

    miércoles, 18 de abril de 2018 21:49

Todas las respuestas

  • La mejor idea es siempre mostrar los mensajes de error exactos.  Si son en tiempo de ejecución, incluir el stack trace también.

    Veo que el código que comienza en:

     // Set up a timer to trigger every minute.  

    Y termina en:

    timer.Start();

    Está fuera de todo método de la clase.  Eso no compila.  Imagino que deseaba ponerlo dentro de OnStart.

    Bueno, la declaración de la variable timer sí puede quedarse donde está.


    Jose R. MCP
    Code Samples


    miércoles, 18 de abril de 2018 21:57
    Moderador
  • hola

    >>Los código la verad no se seguirlo, me dan errores por todas partes.

    que dicen los mensajes de error,  a veces uno puede ser consecuencia de otro, pero arraglandolo se solucionan los demas

    lo que si noto es que este bloque de codigo

     System.Timers.Timer timer = new System.Timers.Timer();
            timer.Interval = 60000; // 60 seconds  
            timer.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimer);
            timer.Start();

    no esta dentro de ningun metodo, no puede estar flotando en la clase

    imagino tiene que estar en el OnStart

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 19 de abril de 2018 0:08
  • Hola:

    He puesto el código como dices. Estoy siguiendo el tutorial, que me cuesta seguirlo.

    Los errores.

    Código C#:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Linq;
    using System.ServiceProcess;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace MyNewService
    {
        public partial class MyNewService : ServiceBase
        {
            private System.ComponentModel.IContainer components;
            private System.Diagnostics.EventLog eventLog1;
    
            private int eventId = 1;
    
            public MyNewService()
            {
                InitializeComponent();
                eventLog1 = new System.Diagnostics.EventLog();
                if (!System.Diagnostics.EventLog.SourceExists("MySource"))
                {
                    System.Diagnostics.EventLog.CreateEventSource(
                        "MySource", "MyNewLog");
                }
                eventLog1.Source = "MySource";
                eventLog1.Log = "MyNewLog";
            }
    
            protected override void OnStart(string[] args)
            {
                eventLog1.WriteEntry("In OnStart");
    
                // Set up a timer to trigger every minute.  
                System.Timers.Timer timer = new System.Timers.Timer();
                timer.Interval = 60000; // 60 seconds  
                timer.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimer);
                timer.Start();
            }
            
    
    
    
                public void OnTimer(object sender, System.Timers.ElapsedEventArgs args)
            {
                // TODO: Insert monitoring activities here.  
                eventLog1.WriteEntry("Monitoring the System", EventLogEntryType.Information, eventId++);
            }
    
            protected override void OnStop()
            {
                eventLog1.WriteEntry("In onStop.");
            }
    
            protected override void OnContinue()
            {
                eventLog1.WriteEntry("In OnContinue.");
            }
        }
    }
    Saludos.


    http://electronica-pic.blogspot.com

    jueves, 19 de abril de 2018 5:14
  • La clase es parcial.  Eso quiere decir que puede estar definida en múltiples archivos .cs.  ¿Tiene otro archivo .cs llamado MyNewService, tal vez MyNewService.designer.cs?  En el código que usted muestra solamente veo una declaración de eventLog1 y components, pero entonces la declaración podría estar repetida en el otro archivo.

    Jose R. MCP
    Code Samples

    jueves, 19 de abril de 2018 5:22
    Moderador
  • El código principal puesto arriba siguiendo el tutorial es este: MyNewService.cs

    El otro es este otro: MyNewService.Designer.cs


    http://electronica-pic.blogspot.com

    jueves, 19 de abril de 2018 5:33
  • hola

    de casualidad en el diseñador del servicio no arrastraste desde el toolbox un eventlog

    apunto a esta pantalla

    valida sino hay un eventolog alli

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 19 de abril de 2018 14:05
  • Hola:

    Puse o arrastré EventLog1.

    Parece ser que me perdí en esta parte.

    Para definir otras acciones para el servicio

    • Localice el método que desee controlar y reemplácelo para definir lo que desea que suceda.

      En el siguiente código se muestra cómo reemplazar el método OnContinue :

      C#
    protected override void OnContinue()
    {
    	eventLog1.WriteEntry("In OnContinue.");
    }
    •  
      

    Deben realizarse algunas acciones personalizadas cuando la clase Installer instala un servicio de Windows.Visual Studio puede crear estos instaladores específicamente para un servicio de Windows y agregarlos al proyecto.

    Si tod anda bien y no me he saltado nada. ya puedo ir por aquí.

    Configurar el estado del servicio

    Los servicios informan de su estado al Administrador de control de servicios, para que los usuarios puedan saber si un servicio funciona correctamente.De manera predeterminada, los servicios que se heredan de ServiceBase informan de un conjunto limitado de parámetros de estado, incluidos Detenido, En pausa y En ejecución.Si un servicio tarda un poco en iniciarse, puede ser útil informar de un estado Inicio pendiente.También puede implementar la configuración de estado Inicio pendiente y Detención pendiente si agrega código que llama a la función SetServiceStatusde Windows.

    No es por nada, me cuesta mucho entender este mini tutorial. Cuando l entienda, lo hago a mi manera en -word, jajajajja, con muchas capturas.


    http://electronica-pic.blogspot.com

    jueves, 19 de abril de 2018 15:35