从我的 Winform C# 执行和关闭其他应用程序

Execute And Close Other Applications From My Winform C#

这是我程序的一小部分,我的程序需要从 DataGridView(内容单击事件)启动程序,它只是完美地执行该程序,但无法关闭它,因为一些传入程序没有具有与文件名相同的进程名称。我也尝试获取 processid,但它抛出以下错误(你能给我一个工作代码吗,因为我可以获得我的 winform 进程的 id,但我如何从我的程序中获取外部启动的应用程序的 processid。 我试过了,它抛出以下错误

An unhandled exception of type 'System.ArgumentException' occurred in System.dll Additional information: Process with an Id of 16924 is not running.)"

下面是我获取进程 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();
        }
    }

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