如何导出Windows系统和应用程序事件日志?

使用EvtExportLog函数 ,我目前无法为Path和/或Query参数指定正确的值。

我的目标是导出本地应用程序系统事件日志

我试过了:

 EvtExportLog( IntPtr.Zero, "Application", "*", "C:\\SomePath\\Application.evtx", EventExportLogFlags.LogFilePath); 

具有以下P / Invoke定义:

 [Flags] private enum EventExportLogFlags { ChannelPath = 1, LogFilePath = 2, TolerateQueryErrors = 0x1000 }; [DllImport(@"wevtapi.dll", CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Auto, SetLastError = true)] private static extern bool EvtExportLog( IntPtr sessionHandle, string path, string query, string targetPath, [MarshalAs(UnmanagedType.I4)] EventExportLogFlags flags); 

不幸的是,该函数返回false和最后一个错误代码2( ERROR_FILE_NOT_FOUND )。

我的问题:

PathQuery参数中放置什么来导出本地应用程序和系统事件日志?

回答我自己的问题:

我的PathQuery实际上是正确的。 出了什么问题,是Flags参数。

而不是指定EventExportLogFlags.LogFilePath参数,我不得不指定EventExportLogFlags.ChannelPath参数。

然后导出成功:

 EvtExportLog( IntPtr.Zero, "Application", "*", "C:\\SomePath\\Application.evtx", EventExportLogFlags.ChannelPath); // <-- HERE!