使用.NET远程读取事件日志

我想阅读远程计算机上的事件日志,以检查测试期间的错误。 这是一些相关的代码:

public bool CheckEventLogs(DateTime start) { EventLog myEventLog = new EventLog("CustomLog", "ServerName"); bool errorFound = false; foreach (EventLogEntry entry in myEventLog.Entries) { if (entry.EntryType == EventLogEntryType.Error && entry.TimeGenerated >= start) { Console.WriteLine("Error in Event Log:\n" + entry.Message + "\n"); errorFound = true; } } return errorFound; } 

目前,此代码抛出exception(尝试执行未经授权的操作)。 根据MSDN ,我需要EventLogPermission,但我一直在努力寻找如何使用此权限的任何示例。 有没有人有一个如何做到这一点的例子?

编辑:对评论的回应

感谢大家的评论 – 这里是要求的其他信息:

foreach语句中抛出exception。 具体来说,当逐步执行代码时, in突出显示时in它会在步骤中抛出。 似乎我能够创建事件日志对象,但我无法访问事件日志中的条目。

我的帐户没有权限读取目标系统上的事件日志,但我有一个帐户的凭据。 通过事件查看器手动连接时,可以选择以另一个用户身份进行连接。 手动完成后,我的代码运行没有问题。 但是,每次运行此程序时,我都不能手动执行此操作。 我需要的是一种以编程方式作为另一个用户连接的方法。 我认为EventLogPermission将是这样做的方式,但也许还有另一种方式。 如果有人知道如何以C#中的不同用户身份连接到远程日志,那正是我想要的。

WMI对此非常有用,类似于一个片段

 SELECT Logfile,TimeGenerated,Type,SourceName,Message FROM Win32_NTLogEvent 

允许您查询日志。 MS的这个实用程序将允许您浏览WMI,甚至可以构建.net代码来调用查询。

另一个好处是,它将获得所有活动,并将它们带到应用程序本地,您可以在闲暇时解析它们。 如果在处理过程中断开连接,则以现在的方式迭代事件很容易失败(顺便说一下,这与数据库访问通常采用的方法相同)。

感谢所有对此问题发表评论的人。 一旦我意识到权限可能不是.NET的一部分,而是Windows和事件查看器本身的一部分,我对自己的调查有了一些新的方向。

看起来像是一个“网络使用”命令,只需要在我的本地计算机和远程计算机之间建立连接。 在使用我在问题中发布的代码之前调用“net use”时,事情很有效。 在从事件日志中读取之前,从代码中调用它是很简单的。

再次感谢你的帮助!