1

我目前正在编写的代码在 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——这在远程访问日志时显然是一个问题。

有什么想法吗?

4

1 回答 1

0

您的代码不应该创建新的事件源(旧的自动创建行为是不幸的,但仍然是错误的)。如果您的应用程序需要单独的事件源,则该应用程序的安装程序(以提升的管理权限运行)应该创建它。

于 2009-08-28T20:15:17.363 回答