UAC让我适合!

时间:2009-08-28 20:08:25

标签: c# .net-3.5 uac event-log

我目前正在处理的代码在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”是一个包含事件发送者名称的字符串(这是多个应用程序使用的实用程序,因此通常它将具有使用应用程序的名称)。 “Body”是一个字符串,包含要写入事件日志的文本。

在大多数情况下,这样可以正常工作,但是当写入的计算机使用UAC时,任何创建新EventSource的写入都会失败。即使使用的安全凭据是Administrators组的成员,也会发生这种情况 - 我无法找到指定提升的特权级别的方法。显然,管理员goroup的成员得到两个令牌 - 一个有限,一个提升,但据我所知,指定提升令牌的唯一方法是通过UI - 这显然是远程访问日志时的问题。

有任何想法吗?

1 个答案:

答案 0 :(得分:0)

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