博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# "资源管理器已停止工作"的编程解决方案
阅读量:4116 次
发布时间:2019-05-25

本文共 1186 字,大约阅读时间需要 3 分钟。

如果你使用的是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");           }       }
你可能感兴趣的文章
EntityFramework 学习之一 —— 模型概述与环境搭建 .
查看>>
C# 发HTTP请求
查看>>
启动 LocalDB 和连接到 LocalDB
查看>>
Palindrome Number --回文整数
查看>>
Reverse Integer--反转整数
查看>>
Container With Most Water --装最多水的容器(重)
查看>>
Longest Common Prefix -最长公共前缀
查看>>
Letter Combinations of a Phone Number
查看>>
Single Number II --出现一次的数(重)
查看>>
Valid Parentheses --括号匹配
查看>>
Remove Element--原地移除重复元素
查看>>
Remove Duplicates from Sorted Array--从有序数组中移除重复元素
查看>>
Count and Say
查看>>
Gas Station
查看>>
Palindrome Partitioning --回文切割 深搜(重重)
查看>>
Valid Palindrome 简单的回文判断
查看>>
Pascal's Triangle -- 生成杨辉三角
查看>>
Pascal's Triangle II 生成杨辉三角中的某行
查看>>
Minimum Depth of Binary Tree -- 二叉树的最小深度 DFS 加剪枝
查看>>
Climbing Stairs 爬楼梯方法 动态规划
查看>>