C# process.StandardError保错尚未重定向
时间: 2024-11-03 18:15:07 浏览: 9
process.StandardOutput.ReadToEnd 卡死解決方法! 新方法!
4星 · 用户满意度95%
在C#中,当你尝试读取进程的标准错误流(StandardError)时,如果没有预先对其进行重定向(Redirect),可能会遇到"已关闭"或"尚未重定向"的异常,这是因为标准错误默认是不会自动重定向到应用程序的,它是直接发送到操作系统级别的错误输出的。
例如,如果你试图像这样获取进程错误信息:
```csharp
Process myProcess = new Process();
myProcess.StartInfo.FileName = "myCommand.exe";
myProcess.Start();
// 没有对StandardError进行重定向
string errorOutput = myProcess.StandardError.ReadToEnd();
```
在这个例子中,如果没有显式地将`StandardError`重定向到某个流(如`StreamWriter`或`TextWriter`),当`ReadToEnd()`被调用时,会抛出`IOException`,提示"StandardError has not been redirected or the stream has already been closed."
要避免这个问题,你应该在启动进程前先重定向它的标准错误,例如:
```csharp
using (var process = new Process())
{
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardError = true; // 添加此行来重定向
process.StartInfo.FileName = "myCommand.exe";
process.ErrorDataReceived += (sender, e) => Console.WriteLine(e.Data); // 或者使用StreamReader
process.Start();
process.BeginErrorReadLine(); // 开始接收数据
process.WaitForExit();
}
```
这样,当有错误发生时,`ErrorDataReceived`事件会被触发,你可以从`e.Data`属性中获取错误信息。
阅读全文