C# 中的事件记录器需要管理员权限才能将日志写入 Windows 事件查看器吗?

问题描述 投票:0回答:2

在我的 C# 应用程序中,我使用 EventLog 类来记录消息。它在我的机器上运行得很好,但在客户端机器上却不起作用。

客户端机器配置与我的机器不同。我的机器有 Vista 操作系统,而客户端有 Windows 2003 操作系统。

我在我的计算机上拥有管理员权限,而在客户端计算机上我的应用程序在非管理员用户权限下运行。

在客户端计算机上,我收到错误为故障应用程序,版本,故障模块 kernel32.dll

当我注释掉 EventLog.WriteEntry() 方法调用并开始将日志写入简单文本文件时,我的应用程序在客户端计算机上停止崩溃。

所以我只是想知道事件记录是否需要管理员权限还是什么?

环境详细信息:C#(.NET 2.0 Framework),Windows Vista 上

logging windows-vista windows-server-2003
2个回答
14
投票

.NET Framework 3.5 中的 System.Diagnostics.EventLog 类 @ MSDN:

如果写入事件日志,则必须 指定或创建事件源。你 必须拥有管理权限 计算机来创建新的事件源。

...

如果与 EventLog 实例关联的事件日志的事件源不存在,则会创建新的事件源。要在 Windows Vista 及更高版本或 Windows Server 2003 中创建事件源,您必须具有管理凭据。

这个要求是因为必须搜索所有事件日志,包括安全日志,以确定事件源是否唯一。从 Windows Vista 开始,用户无权访问安全日志;因此,会抛出 SecurityException。


8
投票

一种解决方案是在应用程序安装程序中创建所需的事件源,该安装程序以管理员权限运行。 请参阅 http://support.microsoft.com/default.aspx?scid=kb;EN-US;329291

© www.soinside.com 2019 - 2024. All rights reserved.