Регистрация событий в служебной программе Windows - PullRequest
39 голосов
/ 17 ноября 2011

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

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

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

Ответы [ 2 ]

64 голосов
/ 17 ноября 2011

Во-первых, 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);

это на самом деле довольно просто.

26 голосов
/ 30 июня 2015

Наконец-то я понял, как это работает, объединив различные ответы 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");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...