Window监听未响应程序
2018-09-12

0X1 应对情况

  • 做window的守护进程,当软件未响应时操作

0X2 已知方法

  • 通过Process类型的Responding属性判断(不好用)
  • 监控进程列表是否包含指定进程(当出现XXX已停止时,进程依然存在,需要修改注册表不弹出已停止提示直接关闭进程)
  • 监控进程列表是否包含WerFault.exe进程,这个就是上个方法中出现已停止的弹出窗口进程,需要判断到底是哪一个进程出错(通过WerFault.exe可以获取到指定进程的名称非完整路径)
  • 监控进程列表是否包含WerFault.exe进程,获取句柄,然后获取窗体内容(性能好难度高)
  • 监控window事件查看器(简单稳定性能较差)

0X3 监控window事件查看器

使用EventLog类获取windows事件

const string _shutdownKey = "Application Error";
const string _appdomain = "Application";
var date=DateTime.Now.AddDays(-1);

using (EventLog log = new EventLog(_appdomain))
{
    foreach (EventLogEntry item in log.Entries)
    {
        if (item.EntryType != EventLogEntryType.Error) continue;
        if (item.TimeGenerated < date) continue;
        if (item.Source != _shutdownKey) continue;
        //item.ReplacementStrings长度为13时为.net程序崩溃错误
        if (item.ReplacementStrings.Length != 13) continue;
        //item.ReplacementStrings[10] 为进程完整路径
        Console.WriteLine(item.ReplacementStrings[10]);
    }
}