cmd ファイルを開始して、すぐに出力を取得したいと考えています。
私のコードを見てください。命令process.WaitForExit()
は待ちません。なぜだめですか?
copyf.cmd
表示されている dosbox は cmd の最後まで実行されるため、非表示モードで起動しなければ問題なく動作します。非表示モードでは、process.WaitForExit()
コマンドが完了するまで起動しないため、コマンドは閉じられます。
public void doSomeThing( Queue<string> output, // queue for output log
Queue<string> error // queue for error log
)
{
String com = "some params";
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.FileName = Properties.Settings.Default.pathTo + @"\Make\copyf.cmd";
startInfo.Arguments = com;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
process.StartInfo = startInfo;
Thread thread = new Thread(new ThreadStart(() =>
{
String er;
String outp;
while (true)
{
outp = process.StandardOutput.ReadLine();
if(outp != null)
output.Enqueue("Output :" + outp + "\n");
er = process.StandardError.ReadLine();
if (er != null)
error.Enqueue("Error :" + er + "\n");
}
}));
process.Start();
thread.Start();
process.WaitForExit();
}