Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从我的Winform C执行并关闭其他应用程序#_C#_Visual Studio_Process_Wmic - Fatal编程技术网

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

C# 从我的Winform C执行并关闭其他应用程序#,c#,visual-studio,process,wmic,C#,Visual Studio,Process,Wmic,它是我程序的一小部分,我的程序需要从DataGridView(内容单击事件)启动程序,它只是完美地执行该程序,但无法关闭它,因为一些传入程序的进程名与文件名不同。我也尝试过获取processid,但它引发了以下错误(你能给我提供一个工作代码吗,因为我可以获取winform进程的id,但如何从我的程序中获取外部启动的应用程序的processid。 我试过了,它抛出了以下错误 System.dll中发生类型为“System.ArgumentException”的未处理异常 其他信息:Id为16924

它是我程序的一小部分,我的程序需要从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();
        }
    }

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

您是将其存储在单个变量中,还是最好将其存储在
列表中,并在
列表中进行迭代?@Symon这取决于程序的性质及其需要实际操作。您是否打算启动多个实例,然后将其全部杀死?您是否打算一次只运行一个实例?是否有一个按钮可以杀死所有正在运行的实例,或者有不同的按钮可以杀死不同的实例?您想做的事情将影响您存储数据的方式。其他程序是否为窗口应用程序(如Windows窗体)。如果是这样,你可能想在杀死他们时更加礼貌。给他们发送一条
WM_QUIT
消息,然后,如果他们在一段时间内没有自杀,就退出
进程。kill
shotgun。要做到这一点,你需要找到与该进程相关联的顶级窗口。@Symon实际上,WINFORM需要关闭在处理所有应用程序时关闭所有应用程序。因此,在我的实践或虚拟代码中,我希望我的按钮关闭所有已启动的应用程序。(顺便说一句,谢谢大家,我相信我最终会很开心的。)@Flydog57它们可能是,也可能不是,用户将添加程序并相应地执行它们…请停止这样写,因为你不应该只选择随机的大写字母。对不起@JamesZ,谢谢:)你在回复中做了完全相同的事情?