Код, над которым я сейчас работаю, работает на Windows Server 2003, но должен иметь возможность записи в EventLogs на нескольких машинах. Я пишу в C #, используя VS2008 Pro и .NET Framework 3.5.
Сам код относительно прост (благодаря фреймворку):
using (EventLog remoteEvtLog = new EventLog(LogName, HostName, EventSource))
{
remoteEvtLog.WriteEntry(Body);
}
«LogName» - это строка, содержащая имя журнала для записи - в большинстве случаев «Application».
«HostName» - это строка, содержащая NetBIOS-имя компьютера, на котором должна быть записана запись журнала.
«EventSource» - это строка, содержащая имя отправителя события (это утилита, используемая несколькими приложениями, поэтому обычно она будет иметь имя приложения-потребителя).
«Тело» - это строка, содержащая текст для записи в журнал событий.
В большинстве случаев это работает нормально, но когда машина, на которую выполняется запись, использует UAC, любая запись, которая создает новый EventSource, завершается неудачей. Это происходит, даже если используемые учетные данные безопасности являются членами группы «Администраторы», и мне не удалось найти способ указать уровень привилегий с повышенными правами. Очевидно, члены группы администраторов получают два токена - один ограниченный и один повышенный, но, насколько я могу судить, единственный способ указать повышенный токен - через пользовательский интерфейс, что, очевидно, является проблемой при удаленном доступе к журналам.
Есть идеи?