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 のウィンドウが表示されなくなります。ジョブの取得を決定するまで、すべての出力がキャプチャされて保持されます。コマンドレットを使用してすべてのバックグラウンド ジョブの状態を確認し、次の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 ブロックでラップすることを検討することをお勧めします。