.NET System.Process:当您重定向 StandardError 时,控制台窗口不会收到任何输出

Posted

技术标签:

【中文标题】.NET System.Process:当您重定向 StandardError 时,控制台窗口不会收到任何输出【英文标题】:.NET System.Process: when you redirect StandardError, console window receives no output 【发布时间】:2018-12-17 20:00:16 【问题描述】:

我想获取控制台程序的错误输出,以防它崩溃。但我希望标准输出显示在控制台窗口中。但是,如果我重定向标准错误,则不会向控制台窗口输出任何内容。

Dim p As New Process
p.StartInfo.Filename = filename
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardError = True
p.EnableRaisingEvents = True
p.Start
p.BeginReadErrorLine

所以现在如果启动的进程(控制台程序)崩溃,我会得到预期的错误输出。但是,标准输出在控制台程序中是不可见的。

我写了一个测试程序来启动。

    static void Main(string[] args)
    

        for (int i = 0; i < 1000; i++)
        
            Console.WriteLine(i);
        

        object m = null;
        string s = m.ToString();

    

我希望看到数字 0 - 999 在控制台窗口中滚动并通过重定向获得错误输出,但我在控制台窗口中什么也看不到,除非没有重定向。

我没有发现任何与此问题相关的问题。这是一个缺陷还是我忽略了什么?

【问题讨论】:

【参考方案1】:

我尝试复制相同的内容,但我不能。这是我的代码,我只重定向错误,但我仍然可以在控制台窗口上看到输出:

public class Program

    static void Main(string[] args)
                
        ExecuteCommand(@"cmd.exe", @"/c C:\Users\*****\Documents\Test\ConsoleApp1.exe");            
    

    public static int ExecuteCommand(string exePath, string cmdText)
    
        System.Diagnostics.Process process = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();            
        startInfo.FileName = exePath;
        startInfo.Arguments = cmdText;
        startInfo.RedirectStandardError = true;            
        startInfo.UseShellExecute = false;
        process.StartInfo = startInfo;            
        process.Start();            
        process.BeginErrorReadLine();
        process.WaitForExit();
        return process.ExitCode;
    
 

这是我的输出:

我在做与你尝试过的不同的事情吗?

【讨论】:

我不想阅读标准输出。我希望标准输出像往常一样进入控制台窗口。我只想阅读标准错误。但是如果我重定向标准错误,它会阻止标准输出进入控制台。 我已经更新了我的答案。 ConsoleApp1.exe 与您在“测试程序”问题中发布的代码完全相同。 我没有执行 cmd.exe 并从中启动我的程序。我的看起来更像这样: static void Main(string[] args) ExecuteCommand(@"C:\Users*****\Documents\Test\ConsoleApp1.exe");

以上是关于.NET System.Process:当您重定向 StandardError 时,控制台窗口不会收到任何输出的主要内容,如果未能解决你的问题,请参考以下文章

localhost 将您重定向的次数过多

Spotify Redirect 在参数前添加字符

加载另一个页面后重定向到一个页面后

求助求助,着急呀,网站出现重定向次数过多怎么办

.NET 程序集未使用 System.Process 创建为后台进程

在JSF中注销后尝试再次登录时出现ServletException