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