3

我有一个启动 MSBuild 子进程的 PowerShell 脚本。我想禁用子进程窗口上的“关闭”按钮,这样用户就不能中断进程。但是,我无法找到任何信息表明这是否可能。

如果有人可以确认(并告诉我我将如何去做)或否认这是否可能,我将不胜感激。

4

2 回答 2

1

MSBuild.exe 是一个控制台应用程序,因此默认情况下它将在控制台窗口中运行。您无法真正“禁用”关闭按钮,就像您可以阻止某人(具有正确权限)仅终止 msbuild.exe 进程一样......

你可以做的是使用 PowerShell 2.0 中引入的作业功能来减轻一些风险:

$job = Start-Job -ScriptBlock { 
  & msbuild app.csproj
  if ($LASTEXITCODE -ne 0) { throw "MSBuild failed. Exit code: $LASTEXITCODE" }
}

这将安排脚本块在 PowerShell 会话的后台线程上运行,并且不会显示 msbuild 窗口。所有输出都将被捕获并保留,直到您决定检索作业。您可以使用 cmdlet 检查所有后台作业的状态Get-Job,并使用以下命令接收结果Receive-Job

Wait-Job $job # this line pauses PowerShell/your script until the job returns
$output = $job | Receive-Job

您可以对输出执行任何操作 - 值得注意的是,如果 msbuild 退出状态代码为非零,则抛出的异常将一直保留到您收到作业为止,此时它将像任何其他代码一样被提升到您的代码中例外是。您可能需要考虑将您对 Receive-Job 的调用包装在 try/catch 块中以处理失败的构建。

于 2012-07-05T22:47:36.360 回答
0

如果您不希望出现单独的窗口,则另一种选择:

$buildArgs = "MySolution.sln", "/t:Build", "/p:Configuration=Debug"
Start-Process -FilePath "msbuild" -ArgumentList $buildArgs -NoNewWindow -Wait

Start-Process还有其他标志来控制重定向输出。

于 2014-01-29T20:15:25.327 回答