0

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();
}
4

1 に答える 1