C# "资源管理器已停止工作"的编程解决方案

如果你使用的是win7+的系统,那么你很可能遇到过下面的提示框:

资源管理器已停止工作

导致资源管理器崩溃的原因有很多:
1. 第三方软件冲突,包括中毒软件不兼容等情况
2. 系统本身缺陷,包括缺少必要文件,设置错误或注册表异常等情况
3. 其他

百度有很多的解决方案,不过还是要具体情况具体分析,查找根源。这里就不详述了。

如果你在测试你自己的程序的时候遇到这种情况,并且是确定性的,那很可能就是程序本身存在问题,需要调试排查,比如使用日志记录等来跟踪崩溃点。

如果你的程序是要长时间运行的,并且偶尔才会遇到这种情况,排查也没有找到可疑的问题,那么或许一个临时的方案就是,如何让你的程序自动从 资源管理器已停止工作中恢复,这也是今天这里将要提到的解决方案。

我们的思路很简单:当出现崩溃的时候我们桌面上肯定是有这样一个窗口存在,并且其窗口标题是固定的“Windows 资源管理器”,这时,用户界面是停止了交互功能,但如果我们的程序还能够枚举窗口来找到这个窗口,就是我们的程序可以检测到这个情况,那就可以去显式的重启explorer.exe进程,来从这种情况中恢复回来。测试后你会看到,答案是肯定的。不过如果你在程序中结束掉explorer.exe这个进程,一般并不需要你再显式的去重启这个进程,它会自动重启。
那么代码就简单了:

var handle = Utility.FindWindow("windows 资源管理器");
if(handle != IntPtr.Zero)
{
    RestartExplorer();
    Utility.CloseWindow(handle);
}

public static void RestartExplorer()
       {
           Process[] processes;
           processes = Process.GetProcessesByName("explorer");
           foreach (var p in processes)
           {
               p.Kill();
           }

           //wait auto start
           System.Threading.Thread.Sleep(2000);
           //ensure start
           processes = Process.GetProcessesByName("explorer");
           if (processes.Count() == 0)
           {
               Process.Start("explorer.exe");
           }
       }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值