C# 如何检查exe应用程序何时结束?

C# 如何检查exe应用程序何时结束?,c#,.net,process,C#,.net,Process,我正在C#中创建一个应用程序,它调用一个批处理文件,然后执行另一个.net exe文件,然后在exe文件关闭时运行另一个批处理文件 我可以运行初始批处理文件,并且可以使用Process.start(my.exe)调用exe文件方法,但如何检查exe文件何时最终终止,以便运行最终批处理文件?您可以使用属性确定在应用程序中启动的进程是否已终止 指示流程组件无限期地等待 要退出的关联进程 当您使用Process.start()启动exe时,您有一个Process对象。。。查看退出的事件以及该对象的E

我正在C#中创建一个应用程序,它调用一个批处理文件,然后执行另一个.net exe文件,然后在exe文件关闭时运行另一个批处理文件

我可以运行初始批处理文件,并且可以使用
Process.start(my.exe)调用exe文件方法,但如何检查exe文件何时最终终止,以便运行最终批处理文件?

您可以使用属性确定在应用程序中启动的进程是否已终止

指示流程组件无限期地等待 要退出的关联进程


当您使用Process.start()启动exe时,您有一个
Process
对象。。。查看退出的
事件以及该对象的
EnableRaisingEvents
属性,您可以调用:

当关联的进程退出时(即当它被 操作系统(通过正常或异常终止),系统 存储有关流程的管理信息并返回到 已调用WaitForExit()的组件。流程组件可以 然后使用 已退出进程的句柄

或,以及上的钩子代码:

关键区别在于同步或异步。从已退出的文档:

有两种方式可以在关联的进程启动时收到通知 退出:同步和异步。同步通知 依赖于调用WaitForExit方法来暂停对 在关联组件退出之前,请关闭应用程序。异步的 通知依赖于退出的事件。无论哪种情况, 必须将EnableRaisingEvents设置为true,流程组件才能启动 接收进程已退出的通知

此外,当您开始运行批处理文件时,请查看以下帖子:


使用Process.Start(字符串)返回的Process对象,可以调用WaitForExit()

因此:


这似乎对我不起作用。然而,当我像Bryanmac所说的那样启用事件时,它成功了。谢谢。WaitForExit()对我不起作用,但在启用事件后,它起了作用。+1-内联表达回调代码的好方法…@George Stocker这个问题对我来说似乎是真实的。@Blorgbeard问题是这个问题(无论是在当前状态还是在您有用的编辑之前的状态)缺少一些东西:对OP部分的研究,以及他们尝试使用的不起作用的代码。我们确实希望OP尽可能少的努力(防止堆栈溢出成为“为我工作”的地方),而这个问题并没有超过这个标准。
myProcess.WaitForExit():
myProcess.EnableRaisingEvents = true;
myProcess.Exited += new EventHandler(myProcess_Exited);
private void myProcess_Exited(object sender, System.EventArgs e)
{
    Console.WriteLine("Exit time:    {0}\r\n" +
        "Exit code:    {1}\r\nElapsed time: {2}", myProcess.ExitTime, myProcess.ExitCode, elapsedTime);
}
        Process p = new Process();
        p.EnableRaisingEvents = true;
        //...config your process
        p.Exited += new EventHandler((s, e) =>
        {
            if (p.ExitCode == 0)
            {
                /*Launch your final batch*/
            }
            else
            {

            }

        });
        p.Start();
Process process = Process.Start(programFileName); // Starts the program

// ... do some other stuff here, if necessary

process.WaitForExit(); // Waits indefinitely for the process to finish
process.Close(); // Frees resources associated with the process

// ... do other stuff here