Как использовать класс Microsoft.Diagnostics.Tracing.EventSource для регистрации событий, генерируемых службой?

Мы написали класс, отвечающий за регистрацию событий, полученных из EventSource.NET Framework 4.6. Мы успешно использовали этот механизм в веб-приложении, но изо всех сил пытаемся заставить его работать с приложением Windows, которое запускается как служба. Служба устанавливается с использованием класса установщика. После установки он отображается в оснастке services.msc, назначенной учетной записи локальной системы.

Для регистрации нашего EventSource мы используем программу wevtutil с im Manifestfilename.man параметр. Открытие оснастки eventvwr.msc показывает наш недавно зарегистрированный EventSource. Мы используем каналы Debug и Operational для регистрации наших событий.

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

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

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

0 ответов

Другие вопросы по тегам