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

Я разработал службу Windows на С#. Я создал установщик с 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);
}

Ответ 1

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

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

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

Ответ 2

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

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

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