Sto generando un processo figlio che viene eseguito in una finestra della console visibile (è un file batch che esegue MSBuild), e mi piacerebbe avere l'output generato dal processo visualizzato nella finestra della console visibile, nonché acquisire quell'output in modo che possa elaborarlo in codice. Ho letto diverse altre domande e la documentazione MSDN trattare con ProcessStartInfo.RedirectStandardOutput e simili, e posso catturare l'output dal flusso reindirizzato ed elaborare nel codice bene:Cattura l'output standard e lo visualizza ancora nella finestra della console
Process msBuild = new Process();
msBuild.StartInfo.FileName = "Build.bat";
msBuild.StartInfo.UseShellExecute = false;
msBuild.StartInfo.RedirectStandardOutput = true;
msBuild.Start();
string output = msBuild.StandardOutput.ReadToEnd();
msBuild.WaitForExit();
Il problema è che il l'output non viene visualizzato nella finestra della console del processo figlio; Ho solo una finestra della console vuota sullo schermo mentre il processo è in esecuzione, che scompare quando è finito.
Suppongo di poter nascondere la finestra del processo figlio effettivo e di visualizzare una seconda finestra in cui scrivere semplicemente l'output come è stato acquisito, ma sembra più lavoro del necessario. C'è un modo per avere l'output visualizzato nella finestra della console e catturarlo ancora per l'elaborazione quando è finito?
Wow - che non avevo visto prima OutputDataReceived. Neat! –
Questo sembra rispondere alla domanda se posso o meno avere l'output visualizzato nella finestra della console di proprietà del processo figlio e reindirizzato al processo padre allo stesso tempo. La mia prossima domanda sarebbe, è possibile non reindirizzare l'output, e solo catturare tutto dalla console quando il processo si chiude? Oppure, in caso contrario, qual è il modo migliore per creare manualmente una finestra della console in modo che possa scrivere l'output reindirizzato su di esso mentre il processo viene eseguito (utilizzando 'OutputDataReceived')? – mjl5007
Dai un'occhiata a http://msdn.microsoft.com/en-us/library/system.diagnostics.process.outputdatareceived.aspx. Ha un esempio (potresti voler disattivare tutte le lingue tranne C#) –