我在C#中创建一个调用批处理文件的应用程序,然后执行另一个.net exe文件,然后在exe文件关闭时运行另一个批处理文件。
我可以运行初始批处理文件,我可以使用Process.start(my.exe);
方法调用exe文件但是如何检查exe文件何时最终终止以便我可以运行最终的批处理文件?
答案 0 :(得分:4)
您可以使用Process.WaitForExit属性来确定您在应用程序中启动的进程是否已终止。
指示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 收到流程已退出的通知。
此外,当您开始运行批处理文件时,请查看此帖子:
答案 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>