C#杀死了一个labview应用程序

本文关键字:一个 labview 应用程序 | 更新日期: 2023-09-27 18:27:22

我在杀死一个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()没有工作)。我得到一个异常:"没有进程与此对象关联"。我只是在寻找一个功能,帮助我杀死这个过程,就像任务经理所做的。

C#杀死了一个labview应用程序

就文档而言,无法确定对象是否与流程关联。做你想做的事情的唯一方法是将呼叫包装在一个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.CKill()首先需要获取对象的句柄,所以该对象需要至少有一个Process.Ckill()的句柄,以便在无法获取句柄时不引发异常,正如您在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");
}