3

MSBuildの子プロセスを起動するPowerShellスクリプトがあります。ユーザーがプロセスを中断できないように、子プロセスウィンドウの「閉じる」ボタンを無効にします。しかし、これが可能かどうかを示す情報は見つかりませんでした。

誰かがこれを確認する(そして私がこれをどのように行うかを教えてくれる)か、これが可能かどうかを否定することができれば、私はそれを大いに感謝します。

4

2 に答える 2

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コマンドで結果を受け取ることができます。Receive-Job

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

出力に対しては何でもできます。msbuild の終了ステータス コードがゼロ以外の場合にスローされる例外は、ジョブを受け取るまで保持され、その時点で他のコードと同様にコードに発生することに注意してください。例外でしょう。失敗したビルドに対処するために、Receive-Job への呼び出しを try/catch ブロックでラップすることを検討することをお勧めします。

于 2012-07-05T22:47:36.360 に答える