禁用MSBuild子进程的关闭按钮

时间:2012-07-05 19:18:42

标签: powershell msbuild

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

如果有人可以确认(并告诉我将如何进行此操作)或否认这是否可行,我将非常感激。

2 个答案:

答案 0 :(得分: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的窗口。在您决定检索作业之前,将捕获并保留所有输出。您可以使用Get-Job cmdlet检查所有后台作业的状态,并使用Receive-Job

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

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

答案 1 :(得分:0)

如果您不想显示单独的窗口,则为另一个选项:

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

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