C# 无法捕获过程标准输出?

C# 无法捕获过程标准输出?,c#,C#,我正在启动一个进程并尝试读取标准输出。。。我非常熟悉启动流程、重定向和捕获输出的正常方式 但是,我遇到过一个应用程序,我可以在命令提示符下手动启动,并在控制台中查看输出,但在StdOut或StdErr流上不提供任何输出。我已尝试先启动cmd.exe,并且我能够从cmd.exe捕获输出,但在以这种方式启动时也无法捕获此进程 更清楚地说,当我手动运行app.exe时,我会在控制台上看到: 正在尝试连接到VP 正在尝试连接到VP 从System.Diagnostics.Process直接启动时: [空

我正在启动一个进程并尝试读取标准输出。。。我非常熟悉启动流程、重定向和捕获输出的正常方式

但是,我遇到过一个应用程序,我可以在命令提示符下手动启动,并在控制台中查看输出,但在StdOut或StdErr流上不提供任何输出。我已尝试先启动cmd.exe,并且我能够从cmd.exe捕获输出,但在以这种方式启动时也无法捕获此进程

更清楚地说,当我手动运行app.exe时,我会在控制台上看到:

正在尝试连接到VP

正在尝试连接到VP

从System.Diagnostics.Process直接启动时:

[空白]

当我通过cmd.exe从System.Diagnostics.Process启动它时:

Microsoft Windows[版本6.1.7601]

版权所有(c)2009微软公司。版权所有

同样,我用来执行此操作的类运行了许多进程,并且只有一个问题是如何使用此app.exe获取输出,因此这不是“嘿,也许尝试重定向标准输出”类型的问题。我知道这在我的实现中起作用

想法?我从来没有遇到过这种情况。。当手动运行时,而不是通过process对象运行时,进程如何将某些内容放在控制台窗口上

这是我的密码:

process = new Process();
process.StartInfo.FileName = f.FullName;
process.StartInfo.Arguments = arguments;
process.StartInfo.WorkingDirectory = workingDir;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardInput = true;
process.OutputDataReceived += p_OutputDataReceived;
process.ErrorDataReceived += p_ErrorDataReceived;
if (!process.Start())
{
    throw new Exception("Failed to start [" + f.Name + "]. Exit code " + process.ExitCode);
}
process.BeginOutputReadLine();
process.BeginErrorReadLine();

processRunning = true;

process.WaitForExit();

exitCode = process.ExitCode;

只需等待更长的时间,直到程序生成了大约2或4千字节的输出,并且流缓冲区被填满。修复这一问题需要程序的源代码,而源代码通常是程序的结尾。p_OutputDataReceived在做什么?请发布。是不是app.exe被设计成在特定的执行上下文中保持沉默,比如位置或安全性?也许如果它是由管理员运行的,它的行为方式就不一样了?我知道这是一个很长的机会,但可能值得调查。在工作中,我们确实遇到过这样的问题,但从来没有耐心看到它结束。我们制定了变通办法。在一个例子中,我们创建了一个带有
exe>tmp.txt 2>&1
重定向的批处理文件。我们启动了批处理文件并使用了文本文件。成功了。在另一个场景中,参数中有空格,应用程序的行为异常。我们做了适当的报价,它的工作。再次出现了管理权限问题。应用程序在内部调用了
netstat-b
,但在没有管理员权限的情况下失败。糟糕的是它什么也没说。@TyCobb--p_OutputDataReceived什么都不做,因为它从来没有被调用过,所以它的内容实际上不是讨论的一部分。汉斯——我希望。。。再多的等待也解决不了它。克罗诺——也许吧。不过,我确实看到了这个冒犯的应用程序的源代码,它只是使用了看起来是标准的PrTrf语句(所以,它是C++应用程序)好奇的——是的,幸运的是,它也有一个日志文件,我能够监视它以获得我需要的,但是我讨厌像这样的黑客,因为它应该是一个简单的STDUT捕获。