我在 C# 中创建一个调用批处理文件的应用程序,然后执行另一个 .net exe 文件,然后在关闭 exe 文件时运行另一个批处理文件。
我可以运行初始批处理文件,并且可以使用该Process.start(my.exe);
方法调用 exe 文件,但是如何检查 exe 文件何时最终终止以便我可以运行最终批处理文件?
您可以使用Process.WaitForExit属性来确定您在应用程序中启动的进程是否已终止。
指示 Process 组件无限期地等待关联的进程退出。
您可以调用WaitForExit():
myProcess.WaitForExit():
当关联的进程退出时(即,当它被操作系统通过正常或异常终止而关闭时),系统会存储有关该进程的管理信息并返回到调用了 WaitForExit() 的组件。然后,进程组件可以通过使用已退出进程的句柄来访问包括 ExitTime 在内的信息。
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 方法来暂停应用程序的处理,直到相关组件退出。异步通知依赖于 Exited 事件。在任何一种情况下,必须将 EnableRaisingEvents 设置为 true,Process 组件才能接收进程已退出的通知。
此外,当您开始运行批处理文件时,请查看此帖子:
使用从 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
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.start() 启动 exe 时,您有一个Process
对象...查看Exited
事件和该EnableRaisingEvents
对象的属性