我目前正在编写的代码在 Windows Server 2003 上运行,但需要能够写入多台机器上的 EventLogs。我正在使用 VS2008 Pro 和 .NET Framework 3.5 使用 C# 进行编码。
代码本身比较简单(感谢框架):
using (EventLog remoteEvtLog = new EventLog(LogName, HostName, EventSource))
{
remoteEvtLog.WriteEntry(Body);
}
“LogName”是一个字符串,其中包含要写入的日志的名称——在大多数情况下是“Application”。“HostName”是一个字符串,其中包含应写入日志条目的机器的 NetBIOS 名称。“EventSource”是一个包含事件发送者名称的字符串(这是一个由多个应用程序使用的实用程序,因此通常它具有消费应用程序的名称)。“正文”是一个字符串,其中包含要写入事件日志的文本。
在大多数情况下,这可以正常工作,但是当被写入的机器使用 UAC 时,任何创建新 EventSource 的写入都会失败。即使使用的安全凭据是管理员组的成员,也会发生这种情况 - 我无法找到一种方法来指定提升的特权级别。显然,Administrators goroup 的成员获得了两个令牌——一个是受限的,一个是提升的,但据我所知,指定提升令牌的唯一方法是通过 UI——这在远程访问日志时显然是一个问题。
有什么想法吗?