从Winform C#执行并关闭其他应用程序

时间:2019-01-02 21:06:13

标签: c# visual-studio process wmic

这是我程序的一小部分,我的程序需要从DataGridView(内容单击事件)启动程序,并且它只是完美地执行了该程序,但由于某些传入程序没有相同的功能而无法关闭它进程名称作为文件名。我也尝试获取processid,但是它引发以下错误(您能提供给我一个有效的代码,因为我可以获取Winform进程的ID,但是如何从程序中获取外部启动的应用的processid。 我尝试过它会引发以下错误

  

System.dll中发生了类型为'System.ArgumentException'的未处理的异常   其他信息:ID为16924的进程未在运行。)“

我获取进程ID但失败的代码如下

    private void button1_Click(object sender, EventArgs e)
    {
        var processid = Process.Start("Calc");
        pn =processid.ProcessName;
        pid = processid.Id;
    }
    int pid;
    String pn;
    private void button2_Click(object sender, EventArgs e)
    {
           var process1 = Process.GetProcessById(pid);
            process1.Kill();
    }

伪代码在下面。

我已经尝试过:

    private void button1_Click(object sender, EventArgs e)
    {
        Process.Start("Calc");
    }
    private void button2_Click(object sender, EventArgs e)
    {
        foreach (var process in Process.GetProcessesByName("Calc"))
        {
            process.Kill();
        }
    }

我的代码:

    private void button1_Click(object sender, EventArgs e)
    {
        Process.Start("THIS PATH WILL COME FROM DATABASE");
    }
    private void button2_Click(object sender, EventArgs e)
    {
        foreach (var process in Process.GetProcessesByName("PROCESS NAME WHICH MY PROGRAM STARTED"))
        {
            process.Kill();
        }
    }

1 个答案:

答案 0 :(得分:2)

启动该过程时,请获取该过程的Id并将其存储。然后,您可以通过id获取该进程以将其杀死。这不仅可以确保您不需要知道进程的名称(以防它与启动它的路径不同),而且还可以确保在运行多个实例(其中一些未启动)的情况下杀死正确的实例。通过您的程序。