是否有C#方式从cmd进程读取异常?

时间:2013-11-15 20:22:57

标签: c# exception-handling cmd

我在执行cmd进程时遇到的具体问题,例如“del * .txt”,其中一个'txt'文件已打开且无法删除,cmd进程将输出一行文字(说出一些内容)比如'正在使用的文件,无法删除文件')到控制台,但没有到StandardOutput或StandardError。根据2008年的这个问题[https://stackoverflow.com/a/320779/832705],答案是否定的,但我想知道在过去4年中这种情况是否会发生变化,或者是否有人发现了解决方法。另外,我可能会误解答案,这可能意味着CLR例外,而不是cmd例外。

这是我的流程设置/开始代码:

ProcessStartInfo psi = new ProcessStartInfo("cmd", string.Empty);
psi.CreateNoWindow = true;
psi.ErrorDialog = false;
psi.RedirectStandardError = true;
psi.RedirectStandardOutput = true;
psi.RedirectStandardInput = true;
psi.UseShellExecute = false;
Process p = new Process();
p.StartInfo = psi;
p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
p.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived);
outputfilesw = new StreamWriter(outputfile, true);
try
{
    p.Start();
    p.BeginOutputReadLine();
    //work code
}

2 个答案:

答案 0 :(得分:2)

您只需调用p.BeginErrorReadLine()即可启动StandardError的异步读取。在OP的建议中添加了答案。

答案 1 :(得分:0)

您可以阅读输出,并可以处理返回的文本。因此,您应该能够找到指示错误的文本,即使它没有出现在错误输出中。

此外,请务必注意,只有正在运行的进程才能确定哪个输出流获取消息。因此,如果您使用的命令决定将错误发送到标准流,那么任何数量的操作系统或C#工作都不会改变它。