Нужно ли вручную создавать источник журнала событий Windows при установке службы Windows


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

Будет ли источник событий автоматически создан (и удален) как часть установки (и удаления) службы windows, или я должен обработайте это самостоятельно и создайте пользовательское действие, чтобы создать и удалить его следующим образом?

protected override void OnBeforeInstall(IDictionary savedState)
{
    base.OnBeforeInstall(savedState);

    if (!EventLog.SourceExists(ServiceName))
        EventLog.CreateEventSource(ServiceName, "Application");
}

protected override void OnAfterUninstall(IDictionary savedState)
{
    base.OnAfterInstall(savedState);

    if (EventLog.SourceExists(ServiceName))
        EventLog.DeleteEventSource(ServiceName);
}
2 12

2 ответа:

Мне кажется, что ServiceInstaller автоматически создает источник данных во время установки с тем же именем, что и Служба, поэтому нет необходимости в каком-либо дополнительном коде.

Из документации ServiceInstaller

При выполнении установки он автоматически создает EventLogInstaller для установки источника журнала событий, связанного с производным классом ServiceBase. Свойство Log для этого источника устанавливается конструктором ServiceInstaller в значение журнал приложений компьютера. Когда вы устанавливаете ServiceName в ServiceInstaller (которые должны быть идентичны класса servicebase..::.ServiceName сервиса), источник автоматически устанавливается в то же значение. При сбое установки выполняется откат исходной установки вместе с ранее установленными службами.

Их следует регистрировать во время установки, поскольку учетная запись службы может не иметь права делать это во время выполнения: Как добавить приложение в качестве источника записей журнала событий:

По умолчанию, если вы попытаетесь написать въезд без предварительной регистрации ваш компонент как действительный источник, система автоматически регистрирует источник с журналом событий, используя значение свойства Source как исходная строка. В общем, создайте новый источник события во время установка вашего приложения. Этот позволяет время для операционной системы чтобы обновить свой список зарегистрированных источники событий и их конфигурация. Если операционная система не имеет обновил список источников событий и вы пытаетесь написать событие с помощью новый источник, операция записи потерпеть неудачу. При создании источника во время установки это не вариант, затем попробуйте создать источник хорошо перед первой операцией записи, возможно во время вашего применения инициализация. Если вы выберете это подходите, обязательно ваша инициализация код работает с администратором права на компьютер. Это право требуются для создания нового события источники

К счастью, ServiceInstaller делает это очень легко, как вы уже выяснили.