J'ai besoin de créer un processus enfant qui est une application console, et de capturer sa sortie.
J'ai écrit le code suivant pour une méthode :
string retMessage = String.Empty;
ProcessStartInfo startInfo = new ProcessStartInfo();
Process p = new Process();
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardInput = true;
startInfo.UseShellExecute = false;
startInfo.Arguments = command;
startInfo.FileName = exec;
p.StartInfo = startInfo;
p.Start();
p.OutputDataReceived += new DataReceivedEventHandler
(
delegate(object sender, DataReceivedEventArgs e)
{
using (StreamReader output = p.StandardOutput)
{
retMessage = output.ReadToEnd();
}
}
);
p.WaitForExit();
return retMessage;
Cependant, cela ne donne rien. Je ne crois pas que le OutputDataReceived
est rappelé, ou l'événement WaitForExit()
peut bloquer le fil d'exécution, de sorte qu'elle ne fera jamais de rappel.
Des conseils ?
EDITAR: On dirait que j'en faisais trop avec le rappel. Je le fais :
return p.StandardOutput.ReadToEnd();
Il semble que cela fonctionne bien.