J'ai créé un programme de service Windows et je souhaite que mon erreur soit strictement écrite dans le journal des événements Windows. J'ai donc suivi ces étapes à partir de l'article de projet de code:
http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx
Mais je ne vois aucun des messages de journal personnalisés que j'ai écrits dans les journaux d'événements créés dans la fenêtre de l'observateur d'événements lorsque je démarre ou arrête le service. De plus, comment puis-je spécifier si le message est dû à une erreur ou s'il s'agit uniquement d'informations?
Tout d'abord, MSDN est votre ami. Assurez-vous de vérifier le lien, car il existe des problèmes potentiels à connaître.
Essentiellement, vous créez un objet EventLog:
this.ServiceName = "MyService";
this.EventLog = new System.Diagnostics.EventLog();
this.EventLog.Source = this.ServiceName;
this.EventLog.Log = "Application";
Vous devez également créer une source, si la source ci-dessus n'existe pas:
((ISupportInitialize)(this.EventLog)).BeginInit();
if (!EventLog.SourceExists(this.EventLog.Source))
{
EventLog.CreateEventSource(this.EventLog.Source, this.EventLog.Log);
}
((ISupportInitialize)(this.EventLog)).EndInit();
puis utilisez-le simplement:
this.EventLog.WriteEntry("My Eventlog message.", EventLogEntryType.Information);
c'est en fait assez simple.
J'ai finalement réussi à faire fonctionner cela en combinant diverses réponses StackOverflow et MSDN.
Incluez d'abord les espaces de noms suivants
using System.ComponentModel;
using System.Diagnostics;
Ensuite, configurez la journalisation dans votre constructeur
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";
}
Utilisez comme suit:
protected override void OnStart(string[] args)
{
base.OnStart(args);
this.EventLog.WriteEntry("In OnStart");
}