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

时间:2012-09-14 04:40:34

标签: c# .net process

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

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

5 个答案:

答案 0 :(得分:4)

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

Process.WaitForExit - MSDN

  

指示Process组件无限期地等待   相关流程退出。

答案 1 :(得分:4)

您可以拨打WaitForExit()

myProcess.WaitForExit():
  

当关联的进程退出时(也就是当它被关闭时)   操作系统通过正常或异常终止),系统   存储有关流程的管理信息并返回到   已调用WaitForExit()的组件。 Process组件可以   然后使用。访问包含ExitTime的信息   处理退出的流程。

enable events上的exited event和挂钩代码:

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);
}

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

  

关联过程有两种方式得到通知   退出:同步和异步。同步通知   依赖于调用WaitForExit方法来暂停处理   您的应用程序,直到相关组件退出。异步   通知依赖于退出事件。在任一情况下,   对于Process组件,必须将EnableRaisingEvents设置为true   收到流程已退出的通知。

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

How to execute a batch file from C#?

答案 2 :(得分:3)

使用从Process.Start(string)返回的Process对象,可以调用WaitForExit()。

所以:

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

答案 3 :(得分:1)

        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();

答案 4 :(得分:0)

当您使用Process.start()启动exe时,您有一个Process对象...查看Exited事件和该对象的EnableRaisingEvents属性< / p>