gpt4 book ai didi

c# - 如何在没有 "process has exited"异常的情况下终止进程?

转载 作者:可可西里 更新时间:2023-11-01 08:43:40 24 4
gpt4 key购买 nike

我使用 Process.Kill() 来终止进程。像这样:

if( !process.WaitForExit( 5000 ) ) {
process.Kill();
}

有时进程会在两行之间退出,所以控制会进入 if 然后 Kill 会产生异常:

System.InvalidOperationException
Cannot process request because the process (ProcessIdHere) has exited.
at System.Diagnostics.Process.GetProcessHandle(Int32 access, Boolean throwIfExited)
at System.Diagnostics.Process.Kill()
//my code here

现在将代码包装到 try-catch 中似乎不是一个好主意,因为 InvalidOperationException 可以因其他原因被调用。

有没有办法在描述的场景中终止进程而不会出现异常?

最佳答案

您可以 P/Invoke TerminateProcess通过它Process.Handle .然后手动评估它的原因 (GetLastError())。这大致就是 Process.Kill() 在内部执行的操作。

但请注意,TerminateProcess 是异步的。因此,您必须等待进程句柄以确保它已完成。 使用 Process.Kill() 为您做到这一点。

更新:更正,Process.Kill() 也异步运行。因此,您必须使用 WaitForExit() 来等待终止完成 - 如果您愿意的话。

坦率地说,我不会打扰。当然,总是有(远程?)一些“任意”InvalidOperationExcepion 冒出那行代码的机会,这与不再存在的进程或 Process 无关 对象处于无效状态,但实际上我认为您可以在 Kill 周围使用 try/catch。

此外,根据您的应用,您可以考虑记录这次杀戮,因为这似乎是某种不得已的措施。在这种情况下,用它记录实际的 InvalidOperationException。如果事情变得奇怪,您至少有日志来检查 Kill 失败的原因。

综上所述,出于同样的原因,您可能还想考虑捕获/处理 Win32Exception

关于c# - 如何在没有 "process has exited"异常的情况下终止进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13564645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com