2012-12-23 48 views
1

我試圖在vb.net程序中運行dos命令並捕獲輸出。我有以下代碼:爲什麼vb.net中的「Process」類不會從cmd.exe捕獲錯誤?

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 \),則回覆爲空。即使命令無效,問題仍然是答覆。如何捕捉錯誤,如「命令不被識別爲內部或外部命令...」,「系統找不到指定的路徑..」等。請幫助我。謝謝..

回答

5

錯誤消息出現在名爲StandardError的不同輸出流中。只需使用StreamReader或直接閱讀。當然,您的ProcessStartInfo實例的RedirectStandardError - 屬性必須設置爲True

另外,還有一個ExitCode - 屬性,它在程序結束後返回程序的ExitCode。 0意味着'成功'。其他錯誤代碼可以在MSDN文檔中找到。 Here is a list of the common exit codes。例如,2表示The system cannot find the file specified.

+0

非常感謝.. ExitCode是我真正需要的.. – rahul

0

錯誤可能輸出在CMDReply.StandardError,而不是CMDReply.StandardOutput;嘗試閱讀它。 (並將CMDServer.RedirectStandardError設置爲True。)

+0

謝謝......我明白了:) – rahul

相關問題