2016-09-14 98 views
0

我有一套測試DLL,它是通過Start-Process命令調用OpenCover.Console.exe的powershell腳本運行的。

我有-returntargetcode標誌設置

執行後,我檢查$lastexitcode$?。他們一直分別返回1和True。即使測試失敗。

$lastexitcode不應該$lastexitcode當所有的測試通過時爲0,當它們失敗時爲1?

回答

3

默認情況下,Start-Process是異步的,所以它不會等待您的進程退出。如果希望您的命令行工具同步運行,請刪除Start-Process並直接調用該命令。這是它設置$LASTEXITCODE的唯一方法。例如,造成的CMD.exe退出以2:

cmd /c exit 2 
$LASTEXITCODE 

您可以通過添加-Wait標誌使Start-Process synchonous,但它仍然不會」設置$ LASTEXITCODE。要從Start-Process獲得ExitCode,您需要將-PassThru添加到您的Start-Process,然後輸出[System.Diagnostics.Process]對象,您可以使用該對象監視該流程,並(最終)訪問其ExitCode屬性。這裏有一個例子,應該幫助:

$p = Start-Process "cmd" -ArgumentList "/c exit 2" -PassThru -Wait 
$p.ExitCode 

當然,這種做法的好處是,你並不需要等待的過程,但後來當它離開你有關於它在$p運行信息。

+0

這是-PassThru爲我修好了!謝謝 – lucas

相關問題