C#查杀labview应用程序

时间:2015-12-17 17:21:48

标签: c# system.diagnostics

我在查看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;。我正在寻找一个能帮助我像任务管理器那样杀死这个过程的功能。

1 个答案:

答案 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");
}