Как писать в журнал событий в Windows Server 2008 с помощью С#?

У меня есть следующий фрагмент кода, который хорошо работает в Windows Server 2003. Он записывает в журнал событий приложений в EventViewer. Тот же код не работает в Windows 2008. Приложение вылетает. Просьба помочь, как писать в журнал событий в Windows Server 2008.

if (!EventLog.SourceExists("MyServiceLog"))
{
    EventLog.CreateEventSource("MyServiceLog", "Application");
}
//Create an EventLog instance and assign its source.
EventLog eventLog = new EventLog();
eventLog.Source = "MyServiceLog";
//Write an informational entry to the event log.
eventLog.WriteEntry(Header + ": " + FailureReason);

person Defendore    schedule 02.10.2010    source источник


Ответы (3)


Вы должны быть членом локальной группы администраторов, чтобы создать новый источник событий. Источник, вероятно, существует на сервере Server 2003 или у вас уже есть необходимые разрешения в этой операционной системе. В Server 2008 по умолчанию запускается без повышенных привилегий, даже если вы являетесь администратором. В этом случае вам нужно будет щелкнуть правой кнопкой мыши свое приложение и выбрать «Запуск от имени администратора».

person Martin Liversage    schedule 02.10.2010
comment
Спасибо, я запустил свое приложение в режиме администратора. Теперь он работает нормально. - person Defendore; 04.10.2010
comment
А что, если мое консольное приложение предназначено для работы в качестве службы Windows? Как повысить права службы при запуске? - person Maltrap; 30.11.2012
comment
@Maltrap: службы не повышают права (нет пользователя, который мог бы ответить на запрос UAC). Когда вы устанавливаете службу, вы настраиваете ее для работы с определенной учетной записью пользователя. Вы можете увидеть пользователя в диалоговом окне свойств службы. Если вы хотите, чтобы этот пользователь создал источник событий, он должен иметь соответствующие привилегии. Однако правильнее и безопаснее разрешить установщику не только установить службу, но и необходимые источники событий. Тогда пользователю сервиса не нужны лишние привилегии и при удалении сервиса система очищается. - person Martin Liversage; 30.11.2012

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

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

person Martin    schedule 03.10.2010

повторно «сбой приложения» — этого не должно происходить в управляемой среде. Возможно, в этом случае это связано с разрешениями, но вы навсегда останетесь в темноте и перезапустите свое приложение, если не добавите логику для обработки ошибок (т.е. исключений).

Измените это на

try 
{ 
    /* put your event log code here */ 
} 
catch (Exception e) 
{ 
    /* new code to gracefully handle errors */ 
}

и посмотрите на класс и поля Exception (такие как e.Message, e.StrackTrace), которые вы получаете, чтобы точно определить, что не так и где это произошло.

person Steve Townsend    schedule 02.10.2010