杀死进程(Windows 8)问题

我已经在一个月前安装了Windows 8,并且一直遇到问题,当进程挂起时我无法结束/终止它。 任务管理器和CMD Taskkill / f / PID ####都不会完成这项工作,所以我想我会在C#中编写自己的进程杀手并查看出现的问题。

写完一个小应用程序后,我意识到我并不像我想的那么聪明 – 我仍然无法结束这个过程。 起初我能够通过名称/ PID找到进程:

Process p = Process.GetProcessById(aPid) //or foreach (Process p in Process.GetProcessesByName(aProcessName) 

..当我试图:并且正在获得“拒绝访问”例外:

 process.Kill(); 

..经过一些改变的尝试,我将无法再找到这个过程。 例如。 当我试图通过名称或PID找到它时,没有返回任何内容,而该过程仍然保留在任务管理器和我的屏幕上。

我还读过Process @MSDN,它说如果进程已经终止或无法终止,可以抛出“拒绝访问”.. 🙁

救命? FORCE结束过程真的没办法吗?

好吧,你基本上遇到了阻止任务管理器终止进程的同样问题。 有两个可能的原因。 一个与访问被拒绝的exception相关联,该进程可能已经删除了对其他进程的访问权以获取进程的句柄。 由于您在Windows 8上运行,因此安装了.NET 4.5。 其中为Process类提供了一种新方法,可以调用EnterDebugMode() 。 这使得SeDebugPrivilege可能足以让Kill()工作。

另一个是一个更大的问题,该进程可能在内核模式中有一个未退出的线程。 诊断的最佳方法是使用“任务管理器”,“详细信息”选项卡,右键单击其中一个列标题,然后选择“选择列”。 勾选“句柄”。 查看该过程的显示值。 如果您看到非零值,则该进程很可能已打开句柄并正在等待设备驱动程序执行I / O请求。 而且该设备驱动程序不受Windows的影响,要求它取消请求。 缩小麻烦制造者并不容易,您必须更多地了解您的流程执行的I / O请求类型。 通过在superuser.com上询问有关它的问题来跟进此问题