2013-10-10 70 views
0

在C#中針對System.Diagnostics.Process工具編寫代碼時,我只捕獲StandardOutput並解析它。但是,有關此構建服務器的單元測試失敗。一位同事在他的機器上試過後,也失敗了。爲什麼我的機器將stderr寫入標準輸出?

然後我發現Jon Skeet's answer有一個關於爲什麼StandardOutput爲空的問題,他提到從System.Diagnostics.Process中捕獲StandardOutput和StandardError。果然,我們在我的同事的機器上試了一下,結果很奏效。

我的問題是,爲什麼東西被寫入到真實被寫入StandardError的(sterr)我同事的機器和我們構建服務器上我的機器上StandardOutput(標準輸出)?是否存在強制執行此行爲的環境設置?

回答

1

事實證明,我正在調用的命令sqlcmd.exe在我的同事的計算機和生成計算機上使用了SQL Server 2008(c:\ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn)但我的機器上的SQL Server 2012(c:\ Program Files \ Microsoft SQL Server \ 110 \ Tools \ Binn)版本。更改路徑變量以指向我的計算機上的SQL Server 2008版本。

當您運行的.sql腳本比sqlcmd.exe -t查詢超時時間長時,SQL Server 2012的sqlcmd.exe中的「Timeout expired」消息寫入標準輸出而不是stderr可能會引起您的興趣,參數設置爲。

相關問題