2012-01-11 107 views
12

下面是在运行紧随其后的代码,我遇到了一个例外:C#事件日志无法访问日志

源没有被发现,但一些或所有事件日志不能被搜索到。无法访问的日志:安全。

的代码是

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

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

我的问题如下:

  1. 为什么没有一个覆盖忽视安全日志,
  2. 我怎样才能解决这个(编程)
  3. 是这样的,因为我是远程desked。

任何建议将是伟大的。

+2

不是特别有用-_- – DigitalJedi805 2012-01-11 19:42:41

+0

只是指出你正在面向全球观众。记在心上。 – Oded 2012-01-11 19:43:58

+0

根据http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts删除'下午好',从而解决问题。 – dsolimano 2012-01-11 20:00:11

回答

16

微软阅读要求您是管理员才能执行出于某种原因,你发现这个方法。

这里是他们的解释(从the MSDN documentation):

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

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

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

+0

很好的解释,并且谢谢,但我似乎错过了我的本地帐户(远程服务或不是)是Administrators组成员的部分。因此,我应该保留管理权限,我不应该? – DigitalJedi805 2012-01-11 20:17:27

+1

作为管理员,Ran VS2010似乎为我的调试环境解决了这个问题,至少。感谢您的建议。 – DigitalJedi805 2012-01-11 20:19:43

8

访问某些EventLog需要提升。改为以管理员身份运行应用程序。

+0

即将耗尽以系统管理员身份登录的调试环境。应该足够吗? – DigitalJedi805 2012-01-11 19:44:32

+0

以管理员身份登录是不够的 - 应用程序必须以提升的权限启动。 – 2012-01-11 19:49:33

+0

作为管理员,Ran VS2010似乎为我的调试环境解决了这个问题,至少。感谢您的建议。 – DigitalJedi805 2012-01-11 20:20:23

0

为了实现正确的日志记录,我建议使用Enterprise LibraryLogging Application Block

开始从here

+1

有问题的代码不记录代码。它搜索LogSource的存在,所以它不清楚你的建议有多相关。对于我们所知的应用程序负责从日志中读取 – 2012-01-11 20:01:54