Ведение журнала событий в Windows Service Program
Я создал сервисную программу Windows, и я хочу, чтобы моя ошибка была строго записана в Windows eventLog. Поэтому я выполнил следующие шаги из статьи проекта кода:
http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx
Но я не вижу ни одного из сообщений пользовательского журнала, которые я написал в журналах событий, созданных в окне просмотра событий, когда я запускаю или останавливаю службу.
Также как указать, было ли сообщение связано с ошибкой или просто информация?
Ответы
Ответ 1
Во-первых, MSDN является вашим другом. Убедитесь, что вы проверяете ссылку, так как есть некоторые потенциальные проблемы, которые стоит знать.
По существу, вы создаете объект EventLog:
this.ServiceName = "MyService";
this.EventLog = new System.Diagnostics.EventLog();
this.EventLog.Source = this.ServiceName;
this.EventLog.Log = "Application";
Вам также необходимо создать источник, если указанный выше источник не существует:
((ISupportInitialize)(this.EventLog)).BeginInit();
if (!EventLog.SourceExists(this.EventLog.Source))
{
EventLog.CreateEventSource(this.EventLog.Source, this.EventLog.Log);
}
((ISupportInitialize)(this.EventLog)).EndInit();
а затем просто используйте его:
this.EventLog.WriteEntry("My Eventlog message.", EventLogEntryType.Information);
на самом деле это довольно просто.
Ответ 2
Я, наконец, получил это для работы, объединив различные ответы StackOverflow и из MSDN.
Сначала включите следующие пространства имен
using System.ComponentModel;
using System.Diagnostics;
Затем выполните регистрацию в вашем конструкторе
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";
}
Используйте следующее:
protected override void OnStart(string[] args)
{
base.OnStart(args);
this.EventLog.WriteEntry("In OnStart");
}