NET远程读取事件日志 - c#

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

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;
}

当前,此代码引发异常(尝试执行未经授权的操作)。根据MSDN,我需要EventLogPermission,但是我一直在努力寻找有关如何使用此权限的任何示例。有谁有这样做的例子吗?

编辑:对评论的回应

谢谢大家的评论-这是要求的其他信息:

foreach语句引发异常。具体来说,当逐步浏览代码时,将在突出显示in之后的步骤中抛出该代码。看来我能够创建事件日志对象,但无法访问事件日志中的条目。

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

参考方案

WMI对此非常有用,例如

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

将允许您查询日志。来自MS的This utility允许您浏览WMI,甚至可以构建.net代码来调用查询。

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

java.net.URI.create异常 - java

java.net.URI.create("http://adserver.adtech.de/adlink|3.0") 抛出java.net.URISyntaxException: Illegal character in path at index 32: http://adserver.adtech.de/adlink|3.0 虽然n…

在ASP.NET WebForms中在服务器端初始化bootsrap datatimepicker - javascript

我有这个HTML<div class='datepicker input-group date' id='datetimepickerStart'> <input type='text' class="form-control" /> <span c…

SQLite。修复sqlite-net-wp8项目依赖项 - c#

为什么SQLGet在NuGet上不可用?为什么它是Visual Studio的一部分,您必须在“工具”->“扩展和更新”中查找更新?在过去的几个月中,我开始对Windows 8和Windows Phone 8进行编码,我希望对此有所了解。对我来说,在Windows 8项目上使用SQLite会创建VS级依赖关系。假设我使用Visual Studio ID…

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…