杀死进程(Windows 8)问题

Ros*_*oss 10 c# process windows-8

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

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

Process p = Process.GetProcessById(aPid)
//or
foreach (Process p in Process.GetProcessesByName(aProcessName)
Run Code Online (Sandbox Code Playgroud)

..当我试图:以及获取"拒绝访问"异常时:

process.Kill();
Run Code Online (Sandbox Code Playgroud)

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

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

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

Han*_*ant 11

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

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