我有一个PowerShell脚本,用于启动MSBuild子进程。我想禁用子进程窗口上的“关闭”按钮,以便用户无法中断该进程。但是,我无法找到任何表明这是否可行的信息。
如果有人可以确认(并告诉我将如何进行此操作)或否认这是否可行,我将非常感激。
答案 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还有其他标志来控制重定向输出。