我在查看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()不起作用)。我得到了例外:"没有进程与此对象相关联#34;。我正在寻找一个能帮助我像任务管理器那样杀死这个过程的功能。
答案 0 :(得分:1)
就文档而言,无法确定对象是否与进程相关联。执行所需操作的唯一方法是将调用包装在try-catch块中:
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");
}