C#EventLog无法访问日志

时间:2012-01-11 19:39:56

标签: c# windows exception event-log

以下是我在运行以下代码时遇到的异常:

  

找不到源,但无法搜索部分或全部事件日志。无法访问的日志:安全性。

代码是

if (!EventLog.SourceExists(this.EventLogSource))

异常的内容对我来说很有意义,这就是为什么不这样做。此行在Visual Studio 2010,.NET 4中作为控制台应用程序运行(暂时)。我已经在不同的环境中运行了这个,但我不希望我是远程桌面的事实打破这种方法。我已尝试更改HKML\CCS\Services\eventlog权限 - 无效,以及C:\Windows\System32\Winevt\Logs\Security.evtx权限。再一次,无济于事。

我的问题如下:

  1. 为什么没有覆盖安全日志,
  2. 我如何解决此问题(以编程方式)
  3. 这是因为我是远程办公桌。
  4. 任何建议都会很棒。

3 个答案:

答案 0 :(得分:17)

Microsoft要求您成为管理员才能执行此方法,原因很简单。

以下是他们的解释(来自the MSDN documentation):

  

要在Windows Vista及更高版本或Windows Server 2003中搜索事件源,您必须具有管理权限。

     

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

你如何解决它将完全取决于你需要做什么。如果您无法以管理员身份登录,那么最好的建议是尝试在try / catch块中执行操作,如果抛出SecurityException,请执行一些备用操作。

答案 1 :(得分:8)

访问某些EventLogs需要提升。请以管理员身份运行该应用。

答案 2 :(得分:0)

我建议使用Logging Application Block Enterprise Library来实现正确的日志记录。

here

开始阅读