我想读取远程计算机上的事件日志以检查测试期间是否有错误。这是一些相关代码:
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
陈述。具体来说,当单步执行在when之后的步骤中抛出的代码时in
被突出显示。我似乎能够创建事件日志对象,但无法访问事件日志中的条目。
我的帐户无权读取目标系统上的事件日志,但我拥有具有该权限的帐户的凭据。通过事件查看器手动连接时,可以选择以其他用户身份进行连接。手动完成此操作后,我的代码运行没有问题。但是,我不能依赖每次该程序运行时手动执行此操作。我需要的是一种以编程方式作为另一个用户进行连接的方法。我以为EventLogPermission
将是做到这一点的方法,但也许还有另一种方法。如果有人知道如何在 C# 中以不同用户身份连接到远程日志,那么这正是我所寻找的。
WMI对此非常有用,像这样的片段
SELECT Logfile,TimeGenerated,Type,SourceName,Message FROM Win32_NTLogEvent
允许您查询日志。这个实用程序来自 MS 的 .NET 允许您探索 WMI,甚至可以构建 .net 代码来调用查询。
这样做的另一个好处是,它将获取所有事件并将它们带到应用程序本地,您可以在闲暇时解析它们。如果在处理时连接断开,则以您现在正在执行的方式迭代事件很容易失败(顺便说一句,这与通常用于数据库访问的方法相同)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)