Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# StdOutput重定向仅部分成功_C#_Windows_Console Application_Stdout_Named Pipes - Fatal编程技术网

C# StdOutput重定向仅部分成功

C# StdOutput重定向仅部分成功,c#,windows,console-application,stdout,named-pipes,C#,Windows,Console Application,Stdout,Named Pipes,我有一个控制台应用程序,我想捕获它的输出。我取得了部分成功。大多数消息都被捕获。但是有些仍然出现在控制台窗口上,并且绕过了我的捕获 这是我用来读取输出的代码: _hProcess = new Process(); _hProcess.StartInfo.FileName = _Filename; // "bochsdbg.exe" _hProcess.StartInfo.Arguments = Arguments; // "-q" _hProcess.StartInfo.WorkingDi

我有一个控制台应用程序,我想捕获它的输出。我取得了部分成功。大多数消息都被捕获。但是有些仍然出现在控制台窗口上,并且绕过了我的捕获

这是我用来读取输出的代码:

_hProcess = new Process();

_hProcess.StartInfo.FileName = _Filename;  // "bochsdbg.exe"
_hProcess.StartInfo.Arguments = Arguments;  // "-q"
_hProcess.StartInfo.WorkingDirectory = Path.GetDirectoryName(_Filename);

_hProcess.StartInfo.UseShellExecute = false;

_hProcess.StartInfo.RedirectStandardInput = true;
_hProcess.StartInfo.RedirectStandardOutput = true;

_hProcess.OutputDataReceived += (Sender, Data) => _Buffer += Data.Data + "\n";

_hProcess.Start();

_hProcess.BeginOutputReadLine();

_ProcessStdInput = _hProcess.StandardInput;

_Reporters.Call("Info", "Process " + _Filename + " is started");
我使用的是Windows8,这不是一个用于生产的程序,而是一个我将要使用的工具。我使用的是框架版本4.5

我所尝试的:

我尝试在批处理文件中打开控制台并重定向输入,如下所示:

cmd.exe bochsdbg.exe>output.txt

这与我自己的应用程序捕获的文本相同,这让我相信还有其他事情在发生。有人知道我如何捕获其余的控制台输出吗

如果这不是一个选项,有人知道微软为打印到控制台显示内存公开了什么API吗?我在这上面找不到任何东西

固定代码:

_hProcess = new Process();

_hProcess.StartInfo.FileName = _Filename;  // "bochs.exe"
_hProcess.StartInfo.Arguments = Arguments;  // "-q"
_hProcess.StartInfo.WorkingDirectory = Path.GetDirectoryName(_Filename);

_hProcess.StartInfo.UseShellExecute = false;

_hProcess.StartInfo.RedirectStandardError = true;
_hProcess.StartInfo.RedirectStandardInput = true;
_hProcess.StartInfo.RedirectStandardOutput = true;

_hProcess.OutputDataReceived += (Sender, Data) => _Buffer += Data.Data + "\n";
_hProcess.ErrorDataReceived += (Sender, Data) => _Buffer += Data.Data + "\n";

_hProcess.Start();

_hProcess.BeginOutputReadLine();
_hProcess.BeginErrorReadLine();

_ProcessStdInput = _hProcess.StandardInput;

_Reporters.Call("Info", "Process " + _Filename + " is started");

您看到的额外输出实际上可能是.NET术语中的
stderr
,或
standarderor
。如果将命令行更改为
cmd.exe bochsdbg.exe>output.txt 2>error.txt
,则将捕获这两个命令行


同样,在.NET代码中,您可以使用该属性。

ugh,真是一团糟。看来你是对的。使用该批处理命令,我捕获所有数据。很奇怪,它似乎将正常输出消息的一部分打印为错误:-/。这个程序必须在引擎盖下充满意大利面代码。非常感谢你的快速回答,我被困在这几个小时了。编辑:在接受之前必须等待(谁提出的?正确答案就是正确答案…)