在我的 C# 应用程序中,我使用 EventLog 类来记录消息。它在我的机器上运行得很好,但在客户端机器上却不起作用。
客户端机器配置与我的机器不同。我的机器有 Vista 操作系统,而客户端有 Windows 2003 操作系统。
我在我的计算机上拥有管理员权限,而在客户端计算机上我的应用程序在非管理员用户权限下运行。
在客户端计算机上,我收到错误为故障应用程序
当我注释掉 EventLog.WriteEntry() 方法调用并开始将日志写入简单文本文件时,我的应用程序在客户端计算机上停止崩溃。
所以我只是想知道事件记录是否需要管理员权限还是什么?
环境详细信息:C#(.NET 2.0 Framework),Windows Vista 上
.NET Framework 3.5 中的 System.Diagnostics.EventLog 类 @ MSDN:
如果写入事件日志,则必须 指定或创建事件源。你 必须拥有管理权限 计算机来创建新的事件源。
...
如果与 EventLog 实例关联的事件日志的事件源不存在,则会创建新的事件源。要在 Windows Vista 及更高版本或 Windows Server 2003 中创建事件源,您必须具有管理凭据。
这个要求是因为必须搜索所有事件日志,包括安全日志,以确定事件源是否唯一。从 Windows Vista 开始,用户无权访问安全日志;因此,会抛出 SecurityException。
一种解决方案是在应用程序安装程序中创建所需的事件源,该安装程序以管理员权限运行。 请参阅 http://support.microsoft.com/default.aspx?scid=kb;EN-US;329291