我正在尝试在一个.NET Framework 4.7.2的WPF应用程序中实现一项功能,该功能允许客户将他们的本地应用程序事件日志作为诊断包的一部分导出。我编写了这个方法:
/// <summary>
/// Exports only errors from local application event log
/// </summary>
void addWindowsEventLog(String exportPath) {
const String QUERY_ERRORS = "*[System/Level=2]";
using (var eventLogSession = new EventLogSession()) {
eventLogSession.ExportLog("Application", PathType.LogName, QUERY_ERRORS, exportPath);
}
}
由于某种原因,它出现了以下异常:
System.Diagnostics.Eventing.Reader.EventLogNotFoundException
at System.Diagnostics.Eventing.Reader.EventLogException.Throw(Int32)
at System.Diagnostics.Eventing.Reader.NativeWrapper.EvtExportLog(System.Diagnostics.Eventing.Reader.EventLogHandle, System.String, System.String, System.String, Int32)
事件日志未找到?我正在使用 Application
日志,该日志明显存在,并且我将 PathType
参数设置为 LogName
。出了什么问题?
- 我已验证传递的
exportPath
是一个完全限定的文件路径,且目录存在。 - 此应用程序始终在管理员上下文中运行,因此似乎不是权限问题。
- 有趣的是,这个问题在一个简单的控制台应用程序中无法重现。
根据堆栈跟踪,异常是由 Win32 本机函数 EvtExportLog 抛出的。
try
和catch
块中进行封装。 - Nexo