C# 终止进程(正在终止的进程)的最不礼貌的方式是什么?

C# 终止进程(正在终止的进程)的最不礼貌的方式是什么?,c#,.net,windows,winapi,C#,.net,Windows,Winapi,真正终止一个进程最不礼貌的方式是什么 我试图使用Process.Kill(System.Diagnostics),但它有一个缺点,使它对我毫无用处: 如果在进程当前终止时调用Kill方法,则会为拒绝访问引发Win32Exception 事实上,我正在处理一个应用程序(不是我的),它经常崩溃,甚至在终止过程中卡住,只有重新启动才会有帮助 正在运行的TASKKILL/F/IM…也会以“拒绝访问”退出。我还尝试P/InvokeTerminateProcess() 尽管这个问题可能有点特别,但我还是非常

真正终止一个进程最不礼貌的方式是什么

我试图使用Process.Kill(System.Diagnostics),但它有一个缺点,使它对我毫无用处:

如果在进程当前终止时调用Kill方法,则会为拒绝访问引发Win32Exception

事实上,我正在处理一个应用程序(不是我的),它经常崩溃,甚至在终止过程中卡住,只有重新启动才会有帮助

正在运行的TASKKILL/F/IM…也会以“拒绝访问”退出。我还尝试P/InvokeTerminateProcess()

尽管这个问题可能有点特别,但我还是非常感谢您的回答。

看看这是否有帮助

private void Test(){
    KillProcess("notepad");
}

private void KillProcess(string processName) {
    Process[] appProcesses = Process.GetProcessesByName(processName);

    if(appProcesses.Length == 0)
        return;

    // Kill and wait for app to exit
    appProcesses[0].Kill();
    appProcesses[0].WaitForExit();
}

问了这个问题后不久,我就明白了为什么应用程序会以一种只有重新启动才有帮助的方式挂起():Avast Anti-Virus。一旦我从所有工作站上删除了该软件,第三方应用程序仍然会崩溃,但这样做之后它实际上会被终止,因此可以再次运行


无论如何谢谢你

如果它已经被终止了,你怎么会认为告诉它再次终止会有帮助呢?你可以尝试杀死它的各个线程。P/Invoke可能是必需的。Process.Kill应该可以工作。你真的想停止服务吗?您正试图杀死哪个应用程序。终止进程只能在内核模式下卡住,例如,如果有任何挂起的I/O未完成。一旦进程被标记为终止,在不危及内核状态完整性的情况下,就不能再对其进行任何操作。使用process explorer和/或内核调试器尝试找出有问题的应用程序在内核模式中的具体位置。如果没有任何帮助,请将有问题的应用程序放在虚拟机中并将其关闭。您已经使用了武库中所有可用的武器。只有重新启动机器才更不方便。除了我要终止的应用程序外,这对每个应用程序都非常有效!