C#Windows窗体-如何将cmd输出保存到文件中,但同时显示cmd窗口

C#Windows窗体-如何将cmd输出保存到文件中,但同时显示cmd窗口,c#,winforms,cmd,output,C#,Winforms,Cmd,Output,我有一个c#Windows窗体应用程序,它运行phing构建文件的一些任务。 现在我有两种可能性: 单击xml任务的按钮,将显示cmd窗口, 显示执行进度,然后关闭cmd(使用/k 我可以保持cmd窗口打开) 单击按钮,cmd输出保存在一个.txt文件中,然后 然后我可以读取文件并在一个文本框中显示内容 不显示cmd窗口) 我想要的是这两者的混合,因为我有一些向用户显示消息的任务,现在如果我使用第二个选项,它会打开一个空的cmd窗口,用户必须猜测问题是什么 因此,我真正想要的是一种显示cmd窗口

我有一个c#Windows窗体应用程序,它运行phing构建文件的一些任务。 现在我有两种可能性:

  • 单击xml任务的按钮,将显示cmd窗口, 显示执行进度,然后关闭cmd(使用/k 我可以保持cmd窗口打开)

  • 单击按钮,cmd输出保存在一个.txt文件中,然后 然后我可以读取文件并在一个文本框中显示内容 不显示cmd窗口)

  • 我想要的是这两者的混合,因为我有一些向用户显示消息的任务,现在如果我使用第二个选项,它会打开一个空的cmd窗口,用户必须猜测问题是什么

    因此,我真正想要的是一种显示cmd窗口直到执行结束的方式(如第1个选项),但同时将cmd输出保存在一个文件中,以便我可以将文件内容放入应用程序的文本框中

    请为一些英语错误道歉

    编辑双高拱门:

               textBox1.Clear();
                var startInfo = new ProcessStartInfo("phing");
                startInfo.WorkingDirectory = @"C:\wamp\bin\php\php5.4.3";
                startInfo.Arguments = "commit > log.txt";
    
    
                Process proc = Process.Start(startInfo);
                proc.StartInfo.UseShellExecute = true;
                proc.StartInfo.RedirectStandardInput = true;
                proc.StartInfo.CreateNoWindow =true ;
    
    
                proc.WaitForExit();
                using (StreamReader sr = new StreamReader(@"C:\wamp\bin\php\php5.4.3\log.txt"))
                {
                    textBox1.Text = sr.ReadToEnd();
                }
    
    使用此代码,控制台的输出显示在文本框上,但当我单击按钮时执行的提交任务对用户有一个问题,因此,当该时间到来时,它会打开一个空的cmd窗口,该窗口预期用户提交消息,但不显示该问题,因此用户必须猜测预期结果

    其他尝试:

    string output = string.Empty;
            string error = string.Empty;
            string path = @"C:\wamp\bin\php\php5.4.3\";
            string ffmpegPath = Path.Combine(path, "phing.bat");
            string ffmpegParams = @"commit";
    
            ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\Windows\System32\cmd.exe");
            startInfo.WorkingDirectory = @"C:\wamp\bin\php\php5.4.3\";
            startInfo.Arguments = "/k" + ffmpegPath + " " + ffmpegParams;
            startInfo.RedirectStandardOutput = true;
            startInfo.UseShellExecute = false;
    
    
            Process ffmpeg = new Process();
            ffmpeg.StartInfo = startInfo;
            ffmpeg.Start();
    
            StreamReader outputReader = ffmpeg.StandardOutput;
    
            textBox1.Text = outputReader.ReadToEnd();
    
            ffmpeg.WaitForExit();
            ffmpeg.Close();
    
    在这种情况下,cmd没有打开,因此没有问题,也没有答案!如果我设置
    startInfo.UseShellExecute=true然后我得到了异常“进程对象必须将UseShellExecute属性设置为false才能重定向IO流”

    我尝试了更多的方法,但结果总是一样的,或者我总是打开cmd窗口,但代码没有传递到文本框(这就是我现在使用的rigth代码)

    或者我将输出保存在一个文件中,或者直接流式传输到文本框中,但我看不到问题


    有人知道如何解决吗?

    使用第一个选项,通过将输出重定向到文件来捕获cmd输出


    显示了一个完整的示例。

    有帮助吗?我无法让它工作。。。就像我说的,我可以把输出放在文本框或cmd窗口中,但我不能让这两个同时工作,我需要这个。。。在我尝试的所有时间里,我总是得到一个例外。如果你得到一个例外,你需要向我们展示例外和抛出它的代码。我编辑的所有代码,抱歉稍后的回答谢谢Caroline。我对C#(嗯,在编程方面)是新手,所以我将代码改编成我的代码,但我不知道如何调用该函数,你能给我一些预期参数的示例吗?
     string path = @"C:\wamp\bin\php\php5.4.3\";
            string ffmpegPath = Path.Combine(path, "phing.bat");
            string ffmpegParams = @"update";
            Process ffmpeg = new Process();
            ffmpeg.StartInfo.WorkingDirectory = @"C:\wamp\bin\php\php5.4.3\";
            ffmpeg.StartInfo.FileName = "cmd.exe";
            ffmpeg.StartInfo.Arguments = "/k" + ffmpegPath +  " " + ffmpegParams;
            ffmpeg.Start();