none
Запись в журнал событий без прав администратора RRS feed

  • Вопрос

  • Доброго времени суток.

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

    Возможно ли это? Если нет, то зачем для записи в журнал событий нужен доступ администратора?

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

    26 марта 2014 г. 13:32

Ответы

  • Права администратора нужны лишь для регистрации нового источника событий. Для записи в существующий журнал от имени существующего источника достаточно прав пользователя.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа alexkr.net 26 марта 2014 г. 21:38
    • Снята пометка об ответе alexkr.net 26 марта 2014 г. 21:43
    • Помечено в качестве ответа alexkr.net 27 марта 2014 г. 6:15
    26 марта 2014 г. 19:16
  • Все источники событий регистрируются в реестре Windows. Здесь кое-что написано об этом. Все приложения обычно пишут свои события в журнал Application. Подключиться к журналу от имени зарегистрированного источника можно так:

    EventLog log = new EventLog("Application", ".", "SourceName");
    где SourceName - имя источника событий. А дальше пишите в этот журнал вызовами WriteEntry. Вот и вся премудрость :)

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа alexkr.net 26 марта 2014 г. 21:38
    • Снята пометка об ответе alexkr.net 26 марта 2014 г. 21:42
    • Помечено в качестве ответа alexkr.net 27 марта 2014 г. 6:15
    26 марта 2014 г. 21:36
  • Да, в простейшем случае можно обойтись и этим. Источник Application зарегистрирован для журнала Application.

    Хотя добавить собственный источник для приложения .NET в реестр совсем не сложно:

    1. Создаем ключ HKLM\System\CurrentControlSet\Services\EventLog\Application\ИмяПриложения

    2. В нем создаем строковый параметр EventMessageFile со значением "%SystemRoot%\Microsoft.NET\Framework\версия\EventLogMessages.dll"

    Для этих "манипуляций", конечно, потребуются права администратора, но это нужно будет сделать только один раз. Самому приложению такие права не потребуются.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа alexkr.net 27 марта 2014 г. 10:50
    27 марта 2014 г. 8:21
  • Понял, спасибо.

    В таком случае можно делать ещё проще:

    EventLog.WriteEntry("Application","Message");

    • Помечено в качестве ответа alexkr.net 27 марта 2014 г. 10:50
    27 марта 2014 г. 6:19

Все ответы

  • Права администратора нужны лишь для регистрации нового источника событий. Для записи в существующий журнал от имени существующего источника достаточно прав пользователя.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа alexkr.net 26 марта 2014 г. 21:38
    • Снята пометка об ответе alexkr.net 26 марта 2014 г. 21:43
    • Помечено в качестве ответа alexkr.net 27 марта 2014 г. 6:15
    26 марта 2014 г. 19:16
  • Можно пример? Как пользоваться уже существующим источником событий? Какие источники событий существует на каждой машине?
    26 марта 2014 г. 21:12
  • Все источники событий регистрируются в реестре Windows. Здесь кое-что написано об этом. Все приложения обычно пишут свои события в журнал Application. Подключиться к журналу от имени зарегистрированного источника можно так:

    EventLog log = new EventLog("Application", ".", "SourceName");
    где SourceName - имя источника событий. А дальше пишите в этот журнал вызовами WriteEntry. Вот и вся премудрость :)

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа alexkr.net 26 марта 2014 г. 21:38
    • Снята пометка об ответе alexkr.net 26 марта 2014 г. 21:42
    • Помечено в качестве ответа alexkr.net 27 марта 2014 г. 6:15
    26 марта 2014 г. 21:36
  •  var log = new EventLog("Application", ".", "Console");
     log.WriteEntry("Blablabla");
    Получаю ошибку System.Security.SecurityException

    • Изменено alexkr.net 26 марта 2014 г. 21:43
    26 марта 2014 г. 21:39
  • Нужно добавлять новый ответ, а не изменять полностью старый (если хотите, чтобы его оперативно прочитали).

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


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    27 марта 2014 г. 5:47
  • Понял, спасибо.

    В таком случае можно делать ещё проще:

    EventLog.WriteEntry("Application","Message");

    • Помечено в качестве ответа alexkr.net 27 марта 2014 г. 10:50
    27 марта 2014 г. 6:19
  • Да, в простейшем случае можно обойтись и этим. Источник Application зарегистрирован для журнала Application.

    Хотя добавить собственный источник для приложения .NET в реестр совсем не сложно:

    1. Создаем ключ HKLM\System\CurrentControlSet\Services\EventLog\Application\ИмяПриложения

    2. В нем создаем строковый параметр EventMessageFile со значением "%SystemRoot%\Microsoft.NET\Framework\версия\EventLogMessages.dll"

    Для этих "манипуляций", конечно, потребуются права администратора, но это нужно будет сделать только один раз. Самому приложению такие права не потребуются.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа alexkr.net 27 марта 2014 г. 10:50
    27 марта 2014 г. 8:21