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

本文关键字:等待 命令 何通过 命令行 执行 | 更新日期: 2023-09-27 18:06:28

我试图通过命令行执行命令,然后执行另一个命令(而不是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");

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

使用流程。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");

可以使用WaitForExit()

注意 :

  1. WaitForExit(int milliseconds)等待关联进程退出的指定毫秒数。
  2. 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(); //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");

更短:

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

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

您可以使用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();
}

使用WaitForExit();进程将是最好的,正如其他人所说的。

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