2011-02-01 119 views
3

我需要在我的c#程序中执行此操作。运行命令并等待在c#中完成#

  Process process = LaunchCommandWindow("Special args and environment set") 
      process.StandardInput.WriteLine("cmd1"); 
      process.StandardInput.WriteLine("cmd2"); 

      //Parse logs 
      using (Streamreader sr = new()) 
      { etc etc..} 

我的命令执行正确,但问题是,解析记录代码犯规等待CMD1和CMD2执行完成。我无法致电退出和处理。 waitforexit因为在解析日志之后,我有更多的命令可以执行。

以下是如何设置流程启动信息。 LaunchCommandWindow()

  ProcessStartInfo startInfo = new ProcessStartInfo(); 

     startInfo.FileName = Path.Combine(Environment.SystemDirectory, "cmd.exe"); 
     startInfo.Arguments = "/K " + newEnvironmentArgs; 

     startInfo.UseShellExecute = false; 
     startInfo.RedirectStandardInput = true; 
     Process process = new Process(); 
     process.StartInfo = startInfo; 
     process.Start(); 

     return process; 

我如何解析日志代码等待CMD2完成?

谢谢。

回答

3

如果“cmd2”向标准输出流写入完成,则可以在标准输出上监听,直到看到该事件,然后从那里进行处理。

+0

这将工作,虽然主线程将进入忙碌的等待状态,同时它会查找完成消息。一个新的线程会阻止程序进入“无响应”状态。 – Jeff 2011-02-01 19:10:40

+1

+1为了做到这一点,他还需要将`RedirectStandardOutput`设置为true。 – 2011-02-01 19:10:54

1

创建一个新线程来运行任务。

使用BackgroundWorker

完成后,它会引发一个事件(在您的主线程中),您可以继续运行该事件。

这样可以防止程序挂起,如果还有其他工作要做,可以让其他线程运行。

Here's a tutorial

----- -----编辑

经过进一步研究,这里是为休息一个念头: 你必须设置RedirectStandardOutput为true,如果你想读输出。

如果你不这样做运行在同一窗口中两个命令,你可以叫 process.WaitForExit(int) 其中int是等待的毫秒数,然后启动一个新的进程(或process与新的论据)发射cmd2。

0

我认为Process.WaitForExit()方法正是你所需要的。还有Process.HasExited属性。
而对于启动使用类似的东西“cmd/C cmd1 & cmd2”

相关问题