我在终止 labview 进程时遇到问题。到目前为止我正在使用这段代码:
string NombreProceso = "FORD EPB FINAL Laser";
Process[] ps = Process.GetProcessesByName(NombreProceso);
if (ps.Count() == 0)
{
TextBox_Eventos.AppendText("[+] " + DateTime.Now.ToString("hh:mm:ss") + " | No se encontró proceso\n");
return;
}
foreach (Process p in ps)
{
p.kill();
TextBox_Eventos.AppendText("[+] " + DateTime.Now.ToString("hh:mm:ss") + " | Cerrando proceso\n");
}
问题是进程没有完成(看起来 p.kill() 不工作)。我收到异常:“没有进程与此对象相关联”。我只是在寻找一种功能,可以帮助我像任务管理器一样终止此进程。
最佳答案
就文档而言,无法确定对象是否与进程相关联。做你想做的唯一方法是将调用包装在 try-catch block 中:
string NombreProceso = "FORD EPB FINAL Laser";
Process[] ps = Process.GetProcessesByName(NombreProceso);
if (ps.Count() == 0)
{
TextBox_Eventos.AppendText("[+] " + DateTime.Now.ToString("hh:mm:ss") + " | No se encontró proceso\n");
return;
}
foreach (Process p in ps)
{
try
{
p.kill();
}
catch (InvalidOperationException) {}
TextBox_Eventos.AppendText("[+] " + DateTime.Now.ToString("hh:mm:ss") + " | Cerrando proceso\n");
}
您还可以尝试查看对象有多少个句柄,因为 Process.Kill() 首先需要获取对象的句柄,对象至少需要有一个句柄才能让 Process.Kill() 不抛出无法获取句柄时的异常,如您在 ReferenceSource 中所见.
string NombreProceso = "FORD EPB FINAL Laser";
Process[] ps = Process.GetProcessesByName(NombreProceso);
if (ps.Count() == 0)
{
TextBox_Eventos.AppendText("[+] " + DateTime.Now.ToString("hh:mm:ss") + " | No se encontró proceso\n");
return;
}
foreach (Process p in ps)
{
try
{
if (p.Handles > 0)
p.Kill();
}
catch (InvalidOperationException) {}
TextBox_Eventos.AppendText("[+] " + DateTime.Now.ToString("hh:mm:ss") + " | Cerrando proceso\n");
}
关于C# 杀死一个 labview 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34340605/