我有一组测试 DLL,我从一个 powershell 脚本运行,该脚本通过 Start-Process
命令调用 OpenCover.Console.exe。
我设置了 -returntargetcode
标志
执行后我检查 $lastexitcode
和 $?
。它们始终分别返回 1 和 True。即使测试失败。
当所有测试都通过时,$lastexitcode
不应该是 0,当它们失败时不应该是 1 吗?
最佳答案
默认情况下,Start-Process
是异步的,因此它不会等待您的进程退出。如果您希望您的命令行工具同步运行,请删除 Start-Process
并直接调用该命令。这是设置 $LASTEXITCODE
的唯一方法。例如,导致 CMD.exe 以 2 退出:
cmd /c exit 2
$LASTEXITCODE
您可以通过添加
Start-Process
标志使 -Wait
同步,但它仍然不会设置 $LASTEXITCODE
。要从 Start-Process
获取 ExitCode,您需要将 -PassThru
添加到您的 Start-Process
,然后输出一个 [System.Diagnostics.Process]
对象,您可以使用它来监视进程,并(最终)访问其 ExitCode
属性。这是一个应该有帮助的例子:$p = Start-Process "cmd" -ArgumentList "/c exit 2" -PassThru -Wait
$p.ExitCode
当然,这种方法的优点是您不需要等待进程,但是稍后当它退出时,您将获得有关它在
$p
中运行的信息。关于PowerShell Start-Process 未设置 $lastexitcode,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39496829/