2012-07-05 57 views
3

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

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

回答

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来处理失败的构建。

+0

好的,谢谢你确认我不能禁用关闭按钮。我知道我可以将MSBuild进程的WindowStyle设置为Hidden,这也会隐藏控制台窗口。 – Casey 2012-07-06 11:52:03

0

如果你不想单独的窗口中出现的另一种选择:

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

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