С# EventLog Недоступный журнал
Ниже приведено исключение, которое я встречал при запуске сразу следующего кода:
Источник не найден, но некоторые или все журналы событий не могут быть найдены. Недостижимые журналы: безопасность.
Код
if (!EventLog.SourceExists(this.EventLogSource))
Содержание исключения имеет смысл для меня, почему это не так. Эта строка работает в Visual Studio 2010,.NET 4, в качестве консольного приложения (пока). Я запустил это в другой среде, но я не ожидал бы, что я удаленный стол, чтобы разбить этот метод. Я пробовал изменять разрешения HKML\CCS\Services\eventlog
- безрезультатно, а также разрешения C:\Windows\System32\Winevt\Logs\Security.evtx
. Опять же, безрезультатно.
Мои вопросы таковы:
- Почему нет переопределения для игнорирования безопасных журналов,
- Как я могу обойти это (программно)
- Это потому, что я удален из таблицы.
Любые советы были бы замечательными.
Ответы
Ответ 1
Microsoft требует, чтобы вы были администратором, чтобы выполнить этот метод по той самой причине, что вы нашли.
Вот их объяснение (от документация MSDN):
Чтобы найти источник событий в Windows Vista и более поздних версиях или Windows Server 2003, вы должны иметь административные привилегии.
Причиной этого требования является необходимость поиска всех журналов событий, включая безопасность, для определения уникальности источника события. Начиная с Windows Vista, пользователи не имеют доступа к журналу безопасности; поэтому генерируется SecurityException.
Как вы обойдетесь, это полностью зависит от того, что вам нужно делать. Лучшая рекомендация, если вы не можете войти в систему как администратор, - это попытаться выполнить ваше действие в блоке try/catch и, если вы создадите SecurityException, выполните несколько альтернативных действий.
Ответ 2
Доступ к некоторым EventLogs требует повышения. Вместо этого запустите приложение как администратор.
Ответ 3
Я рекомендую использовать журнал регистрации блока корпоративная библиотека для правильного ведения журнала.
Начните читать здесь