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