首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RedirectStandardOutput保存控制台文本

使用RedirectStandardOutput保存控制台文本
EN

Stack Overflow用户
提问于 2014-07-13 15:30:44
回答 1查看 308关注 0票数 1

我正在创建一个windows窗体应用程序,我试图从控制台应用程序获得输出,同时在应用程序上打印输出。

我尝试创建一个进程,将RedirectStandardOutput设置为true,将ExecuteShell设置为false,然后启动了一个异步读取操作,该操作运行良好,问题是我的应用程序“窃取”了应用程序的输出,因此输出不再显示在应用程序中。

是否有任何方法来捕获输出,同时将输出保存在控制台应用程序上?我想也许捕获输出,然后将所有的输出发送回应用程序的输出流,但我不知道如何实现这一点。

提前谢谢你,

杰米

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-24 09:45:23

本机方法AllocConsole和FreeConsole可用于为任何正在运行的进程创建和销毁控制台,子控制台进程默认将使用父控制台(它们不会创建额外的浮动式控制台窗口),因此您可以将控制台附加到自己的进程,启动子进程,然后将输出写入新分配的控制台以完成您要完成的任务。如果您还需要用户能够向控制台应用程序提供输入,则解决方案会更复杂一些,但是仍然可以将一些东西放在一起,通过将控制台输入传递到子进程的工作启动一个单独的线程。关于这个实现的另一个很好的细节是,如果您愿意的话,可以将控制台及其输出保持在子进程的出口附近。

下面的表单有两个按钮,但是为了保持示例代码的紧凑性,我不包括按钮本身,只包括它们的单击事件。

代码语言:javascript
复制
public partial class RunForm : Form
{
    public RunForm()
    {
        InitializeComponent();
    }

    private void runButton_Click(object sender, EventArgs e)
    {
        NativeMethods.AllocConsole();

        using (Process process = new Process())
        {
            process.StartInfo.FileName = "cmd.exe";
            process.StartInfo.Arguments = "/c echo Hello world!";
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.RedirectStandardOutput = true;

            process.Start();
            process.OutputDataReceived += process_OutputDataReceived;
            process.BeginOutputReadLine();
        }
    }

    void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
    {
        Console.WriteLine(e.Data);
        // do other things with the output here
    }

    private void closeConsoleButton_Click(object sender, EventArgs e)
    {
        NativeMethods.FreeConsole();
    }
}

internal static class NativeMethods
{
    [DllImport("kernel32.dll", SetLastError = true)]
    public static extern bool AllocConsole();

    [DllImport("kernel32.dll", SetLastError = true)]
    public static extern bool FreeConsole();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24724292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档