Когда и где я должен создать EventLogSource в Windows Service? - PullRequest
1 голос
/ 09 мая 2011

Я занимаюсь разработкой службы Windows с использованием C # и .Net framework 4.0.

Чтобы служба Windows могла записать запись в EventLog, мне нужно проверить и создать источник журнала событий, если онне существует.

if (EventLog.SourceExists("MySource") == false)
            EventLog.CreateEventSource("MySource", "MyLog"); 

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

Когда я гуглил, я нашел оба пути.Итак, не могли бы вы посоветовать лучшую практику для меня?Спасибо.

1 Ответ

0 голосов
/ 09 мая 2011

Я думаю, что было бы лучше добавить Источник журнала событий в установщик, но я бы также проверил, чтобы убедиться, что Источник журнала событий существует при запуске службы.Кроме того, вместо добавления источника журнала событий в конструктор вы, вероятно, захотите использовать одно из событий установщика.Я не делал этого раньше, но я думаю, что событие AfterInstall выглядит как хорошее место для добавления источников журнала событий (дополнительную информацию см. В ответе на этот вопрос: Автоматический запуск службы Windows при установке ).

Причина использования службы установщика для добавления источника журнала событий заключается в том, что (как указывало @MusiGenesis) у вас больше шансов на доступ к безопасности, необходимый для создания источника журнала событий, когдаприложение устанавливается.Когда служба запущена, ее можно настроить на учетную запись, у которой нет разрешений на создание источников журнала событий.

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

  • Записать сообщение об ошибке в файловую систему где-нибудь, указав, что ведение журнала для службы отключено
  • Сгенерировать исключение, чтобы служба не запускалась (что должно вызыватьWindows для записи собственных записей журнала событий)
  • Полностью отключить ведение журнала и т. Д.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...