コマンドプロンプトウィンドウを実行し、プログラムを実行して出力を読み取るために、次のコード(チュートリアルから採用)を実装しました。このコードは、ユーザーコントロールにネストされているButtonClickイベントハンドラーから呼び出されます。
メソッドが「非同期」であるため、これにより、外部プロセスの実行中にプログラムの残りの部分が機能するようになるという印象を受けました。ただし、操作の実行中にUIがフリーズするため、これは当てはまらないようです。cmdプロセスが終了したときに受信した出力が正しいことを追加する必要があります。
このような大量のコードをダンプして申し訳ありませんが、この時点で他に何をすべきかわからないだけです!
どんな援助でも大歓迎です。
public static void runExternalProcess()
{
StringBuilder output = new StringBuilder();
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.OutputDataReceived += new DataReceivedEventHandler(outputEventHandler);
cmd.StartInfo.RedirectStandardInput = true;
cmd.Start();
cmd.BeginOutputReadLine();
StreamWriter sortStreamWriter = cmd.StandardInput;
StreamWriter sw = cmd.StandardInput;
if (sw.BaseStream.CanWrite)
{
sw.WriteLine("ping www.google.com");
}
sw.Close();
cmd.WaitForExit();
MessageBox.Show(output.ToString());
cmd.Close();
}
private static void outputEventHandler(object sendingProcess, DataReceivedEventArgs e)
{
if (!String.IsNullOrEmpty(e.Data))
{
output.Append(e.Data + Environment.NewLine);
}
}