使用.NET远程读取事件日志
我想读取远程计算机上的事件日志以检查测试期间的错误。这里有一些相关的代码:使用.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;
}
目前,这段代码抛出一个异常(试图执行未经授权的操作)。根据MSDN,我需要EventLogPermission,但我一直在努力寻找如何使用此权限的任何示例。有没有人有如何做到这一点的例子?
编辑:回应评论
谢谢大家的评论 - 这里是要求的补充资料:
唯一的例外是从foreach
声明抛出。具体来说,当单击突出显示in
之后的单步执行代码时。看起来我能够创建事件日志对象,但我无法访问事件日志中的条目。
我的帐户没有权限读取目标系统上的事件日志,但我拥有帐户的凭据。当通过事件查看器手动连接时,可以选择以另一个用户身份进行连接。手动完成后,我的代码运行没有问题。但是,我无法在每次运行该程序时手动执行此操作。我需要的是一种以程序方式作为另一用户进行连接的方式。我认为EventLogPermission
将是这样做的方式,但也许有另一种方式。如果有人知道如何在C#中以不同的用户身份连接到远程日志,那就是我正在寻找的东西。
感谢所有提供此问题意见的人。一旦我意识到权限可能不是.NET的一部分,而是Windows和事件查看器本身的一部分,我对自己的调查有了一些新的方向。
它看起来像一个“网络使用”命令是所有需要建立我的本地计算机和远程计算机之间的连接。在使用我在问题中发布的代码之前调用“净使用”时,事情效果很好。在从事件日志中读取之前,从代码中调用该代码非常简单。
再次感谢您的帮助!
你能发布适合你的代码吗? – Praneeth 2012-09-07 15:07:10
我认为在我运行“net use”命令建立本地计算机和远程计算机之间的连接后,我在问题中发布的原始代码已工作。 – Brian 2012-09-10 11:45:18
你能告诉我们你是怎么从你的代码中使用'net use'的?我很难找到这个。 – snippetkid 2016-06-17 14:01:26
WMI是这个非常有用的,像
SELECT Logfile,TimeGenerated,Type,SourceName,Message FROM Win32_NTLogEvent
的摘要将允许您查询的日志。来自MS的This utility将允许您探索WMI,甚至可以构建.net代码来调用查询。
这样做的另一个好处是,它可以获得所有事件并将它们带到本地应用程序,以便在闲暇时分析它们。如果在处理过程中连接中断(顺便说一下,这与通常用于数据库访问的方法相同),那么以现在的方式迭代事件很容易失败。
哪一行引发异常? MSDN文章只说你需要写权限 - 它没有提到任何关于阅读的内容。 – Gabe 2011-03-15 14:31:11
您的用户帐户是否有权读取远程计算机上的事件日志?打开事件查看器并尝试从您的机器连接到远程计算机进行检查。 – 2011-03-15 14:56:15
我只是尝试你的代码,并从远程服务器获取日志。一切正常。 – Polaris 2011-03-15 14:59:19