C# Console';s标准输出重定向,当您在windows中运行git push命令时

C# Console';s标准输出重定向,当您在windows中运行git push命令时,c#,console,redirectstandardoutput,C#,Console,Redirectstandardoutput,我正在用C#构建一个自定义控制台界面(Windows)。它只是将控制台的标准输入、输出和错误重定向到WPF应用程序中的文本框。在后台工作程序中,“cmd.exe”正在运行,每当它输出任何内容时,该输出都会转到textbox 代码的一部分是这样的 private void SetBackgroundWorker() { _worker = new BackgroundWorker { WorkerReportsProgress = true, WorkerSupportsCancellat

我正在用C#构建一个自定义控制台界面(Windows)。它只是将控制台的标准输入、输出和错误重定向到WPF应用程序中的文本框。在后台工作程序中,“cmd.exe”正在运行,每当它输出任何内容时,该输出都会转到textbox

代码的一部分是这样的

private void SetBackgroundWorker()
{
    _worker = new BackgroundWorker { WorkerReportsProgress = true, WorkerSupportsCancellation = true };
    _worker.DoWork += (sender, args) => ReadOutput(_worker);
    _worker.ProgressChanged += (sender, args) => _window.UpdateConsole(args);
}

private void ReadOutput(BackgroundWorker worker)
{
    int count;
    var buffer = new char[1024];
    do
    {
        var builder = new StringBuilder();
        count = _process.Read(buffer, 0, 1024);
        builder.Append(buffer, 0, count);
        worker.ReportProgress(0, builder.ToString());

    } while (count > 0);
}
然后,我可以在这个接口中执行“git add”、“git status”或“git commit”命令(我在path中添加了git bin目录的路径),但是当我尝试“git push origin master”时,文本框不会更新。我希望“用户名为“…”,密码为“…”,但这从来没有发生过

当我在命令提示符中执行“git push…”时,它会显示它们,但在我的wpf界面中,“cmd.exe”似乎根本无法重定向输出,我在这里迷失了方向

我认为我可以尝试的一件事是放弃重定向,使用Windows api钩住cmd.exe,但这会更复杂

如果你能给我建议,我将非常感激


如果您想查看完整的代码并对其进行测试,那么代码将在中。这是一个非常原始的阶段。

我可以想象,应用程序正在使用类似于直接写入屏幕缓冲区的东西,无法截获它——特别是使用标准输出/标准错误重定向。我现在不知道git应用程序在做什么;但它确实经常使用颜色,这似乎需要使用这样的函数,也直接处理屏幕内存。

似乎git.exe将其输出写入stdErr。

嗯,听起来我应该通过win api访问屏幕缓冲区。谢谢你,彼得。