我正在尝试在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。如何捕获错误,如“命令未被识别为内部或外部命令......”,“系统找不到指定的路径......”等。请帮帮我。感谢..
答案 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
。)