我有一个启动 MSBuild 子进程的 PowerShell 脚本。我想禁用子进程窗口上的“关闭”按钮,这样用户就不能中断进程。但是,我无法找到任何信息表明这是否可能。
如果有人可以确认(并告诉我我将如何去做)或否认这是否可能,我将不胜感激。
我有一个启动 MSBuild 子进程的 PowerShell 脚本。我想禁用子进程窗口上的“关闭”按钮,这样用户就不能中断进程。但是,我无法找到任何信息表明这是否可能。
如果有人可以确认(并告诉我我将如何去做)或否认这是否可能,我将不胜感激。
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 块中以处理失败的构建。
如果您不希望出现单独的窗口,则另一种选择:
$buildArgs = "MySolution.sln", "/t:Build", "/p:Configuration=Debug"
Start-Process -FilePath "msbuild" -ArgumentList $buildArgs -NoNewWindow -Wait
Start-Process还有其他标志来控制重定向输出。