コンソールアプリケーションである子プロセスを生成し、その出力をキャプチャする必要があります。
メソッドの次のコードを作成しました。
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;
ただし、これは何も返しません。イベントがコールバックされているとは思わないOutputDataReceived
か、WaitForExit()
コマンドがスレッドをブロックしている可能性があるため、コールバックされることはありません。
何かアドバイス?
編集:私はコールバックであまりにも一生懸命に努力していたようです。行うこと:
return p.StandardOutput.ReadToEnd();
正常に動作しているように見えます。