Подтвердить что ты не робот

Ведение журнала событий в Windows Service Program

Я создал сервисную программу Windows, и я хочу, чтобы моя ошибка была строго записана в Windows eventLog. Поэтому я выполнил следующие шаги из статьи проекта кода:

http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx

Но я не вижу ни одного из сообщений пользовательского журнала, которые я написал в журналах событий, созданных в окне просмотра событий, когда я запускаю или останавливаю службу. Также как указать, было ли сообщение связано с ошибкой или просто информация?

4b9b3361

Ответ 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");
    }