如何通过命令行执行命令并等待它完成

时间:2013-03-28 07:02:54

标签: c#

我正在尝试通过命令行执行命令,然后执行另一个命令(不在cmd中),该命令依赖于前一个命令的结果。 问题是第一个命令需要大约2分钟才能结束,第二个命令不会“等待”第一个命令结束。 如何保持第二个命令等到第一个结束?

提前致谢!

public void runCmd(){
  String command = @"/k java -jar myJava.jar";
  ProcessStartInfo cmdsi = new ProcessStartInfo("cmd.exe");
  cmdsi.Arguments = command;
  Process cmd = Process.Start(cmdsi);
}
.
.
.
runCmd();           //first command, takes 2 minutes to finish
MessageBox.Show("This Should popup only when runCmd() finishes");

5 个答案:

答案 0 :(得分:35)

使用Process.WaitForExit方法:

 public void runCmd()
 {
    String command = @"/k java -jar myJava.jar";
    ProcessStartInfo cmdsi = new ProcessStartInfo("cmd.exe");
    cmdsi.Arguments = command;
    Process cmd = Process.Start(cmdsi);
    cmd.WaitForExit();    
 }
.
.
.
 runCmd();        
 MessageBox.Show("This Should popup only when runCmd() finishes");

答案 1 :(得分:7)

您可以使用WaitForExit()。

注意

  1. WaitForExit(int milliseconds)等待指定的毫秒数,以便关联的进程退出。
  2. WaitForExit()无限期等待关联进程退出。
  3. public void runCmd()
    {
      String command = @"/k java -jar myJava.jar";
      ProcessStartInfo cmdsi = new ProcessStartInfo("cmd.exe");
      cmdsi.Arguments = command;
      Process cmd = Process.Start(cmdsi);
      cmd.WaitForExit(); //wait indefinitely for the associated process to exit.
    }
    .
    .
    .
    runCmd();           //first command, takes 2 minutes to finish
    MessageBox.Show("This Should popup only when runCmd() finishes");
    

答案 2 :(得分:5)

更短:

Process.Start("cmd.exe", @"/k java -jar myJava.jar").WaitForExit();

这是有效的,因为静态方法Process.Start返回Process个对象。然后,您可以直接在其上调用WaitForExit方法,甚至不将其存储在局部变量中。

答案 3 :(得分:2)

您可以使用Process.WaitForExit()方法;

  

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

// Start the process with the info you specified.
// Call WaitForExit and then the using statement will close.
using(Process cmd = Process.Start(cmdsi))
{
      cmd.WaitForExit();
}

答案 4 :(得分:0)

使用WaitForExit();流程最好,就像其他人所说的那样。

根据建议指定命令退出或无限期的时间(以毫秒为单位)。