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

本文关键字:cmd 窗口 显示 存到文件 输出 窗体 Windows | 更新日期: 2023-09-27 18:31:51

我有一个c# Windows表单应用程序,它运行Phing buildfile的一些任务。现在我有 2 种可能性:

  1. 在单击 xml 任务的按钮时,它会显示 cmd 窗口,显示执行进度,然后关闭 cmd(使用/k我可以保持cmd窗口打开)。

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

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

所以我真正想要的是一种显示 cmd 窗口直到执行结束的方式(如第一个选项),但同时将 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 窗口始终打开,但代码没有传递到文本框(这就是我现在使用的代码)

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

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

所以有人知道如何解决它吗?

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

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

此处显示了一个完整的示例。