c# - tiempo - Registrar eventos en un programa de servicio de Windows
orden de eventos en los formularios windows forms (2)
Finalmente conseguí que esto funcionara al combinar varias respuestas de StackOverflow y de MSDN.
Primero incluya los siguientes espacios de nombres
using System.ComponentModel;
using System.Diagnostics;
Luego configura el registro en tu constructor
public UserService1()
{
//Setup Service
this.ServiceName = "MyService2";
this.CanStop = true;
this.CanPauseAndContinue = true;
//Setup logging
this.AutoLog = false;
((ISupportInitialize) this.EventLog).BeginInit();
if (!EventLog.SourceExists(this.ServiceName))
{
EventLog.CreateEventSource(this.ServiceName, "Application");
}
((ISupportInitialize) this.EventLog).EndInit();
this.EventLog.Source = this.ServiceName;
this.EventLog.Log = "Application";
}
Use de la siguiente manera:
protected override void OnStart(string[] args)
{
base.OnStart(args);
this.EventLog.WriteEntry("In OnStart");
}
Creé un programa de servicio de Windows y deseo que mi error se escriba estrictamente en el evento de Windows. Así que seguí estos pasos desde el artículo del proyecto de código:
http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx
Pero no veo ninguno de los mensajes de registro personalizados que escribí en los registros de eventos creados en la ventana del visor de eventos cuando inicio o detengo el servicio. Además, ¿cómo especifico si el mensaje se debió a un error o simplemente es información?
Primero, MSDN es tu amigo. Asegúrate de revisar el enlace, ya que hay algunos posibles errores que vale la pena conocer.
Esencialmente, creas un objeto EventLog:
this.ServiceName = "MyService";
this.EventLog = new System.Diagnostics.EventLog();
this.EventLog.Source = this.ServiceName;
this.EventLog.Log = "Application";
También necesita crear una fuente, si la fuente anterior no existe:
((ISupportInitialize)(this.EventLog)).BeginInit();
if (!EventLog.SourceExists(this.EventLog.Source))
{
EventLog.CreateEventSource(this.EventLog.Source, this.EventLog.Log);
}
((ISupportInitialize)(this.EventLog)).EndInit();
y luego simplemente usarlo:
this.EventLog.WriteEntry("My Eventlog message.", EventLogEntryType.Information);
en realidad es bastante simple.