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

相关问题