我需要在一段时间内执行一个进程,为此我启动一个进程,Timer
10分钟后,我使用 杀死它Kill()
,我按以下方式执行:
using System.Diagnostics;
using System.Threading;
public class Manager{
private Process Proceso;
public Manager(){
//Inicio el proceso EdmServer
Proceso = Process.Start(@"C:\Program Files\SOLIDWORKS PDM\EdmServer.exe");
//StopProcess se ejecuta tras 10 minutos.
Timer t = new Timer(StopProcess, null, 600000 , 0);
}
private void StopProcess(object o)
{
try
{
Proceso.Kill();
}
catch(Exception ex)
{
ex.CreateLog();
}
finally
{
Environment.Exit(0);
}
}
}
代码按我的预期工作,问题是通过提高我打算保持进程打开的时间,增加等待Timer
,当关闭进程时,会生成以下异常:
无法处理该请求,因为该过程已结束。
问题是,当它通过时finally
,执行结束,但我打算关闭的进程仍然打开。
如果进程没有完成,为什么会抛出异常?
正如我在您问题中提供的代码中看到的那样,您没有指定要终止哪个进程。
要正确终止该过程,您可以使用以下代码:
还值得考虑官方文档中提供的信息:
Kill()
远程计算机上运行的进程的方法时引发。该方法Kill()
仅适用于在本地计算机上运行的进程。Kill
如果在进程终止时进行方法调用,则会引发Win32Exception异常,指示 (Access Denied)。要终止特定进程,请使用以下代码行。