为什么vb.net中的“Process”类不能从cmd.exe中捕获错误?

时间:2012-12-23 16:47:53

标签: vb.net cmd

我正在尝试在vb.net程序中运行dos命令并捕获输出。我有以下代码:

    Dim CMDServer As Diagnostics.ProcessStartInfo
    Dim CMDReply As Diagnostics.Process
    CMDServer = New Diagnostics.ProcessStartInfo
    CMDServer.FileName = "cmd.exe"
    CMDServer.UseShellExecute = False
    CMDServer.RedirectStandardOutput = True
    CMDServer.CreateNoWindow = True
    CMDServer.Arguments = "/C " + command
    CMDReply = Process.Start(CMDServer)
    Dim Reply As String = CMDReply.StandardOutput.ReadToEnd()

如果command是有效的dos命令,代码会成功运行,并且我在Reply中获得输出。如果命令没有输出(例如:cd \),则回复为空。问题是即使命令无效,Reply也为null。如何捕获错误,如“命令未被识别为内部或外部命令......”,“系统找不到指定的路径......”等。请帮帮我。感谢..

2 个答案:

答案 0 :(得分:5)

错误消息来自名为StandardError的不同输出流。只需使用StreamReader或直接读取。当然,您RedirectStandardError实例的ProcessStartInfo - 属性必须设置为True

此外,还有一个ExitCode - 属性,它在程序完成后返回程序的ExitCode。 0表示“成功”。其他错误代码可以在MSDN文档中找到。 Here is a list of the common exit codes。例如,2表示The system cannot find the file specified.

答案 1 :(得分:0)

可能会在CMDReply.StandardError上输出错误,而不是CMDReply.StandardOutput;尝试阅读它。 (并将CMDServer.RedirectStandardError设置为True。)