3

別の .exe ファイルを呼び出す powershell スクリプトがあります。 Start-Process ".\file.exe" -wait

file.exe は単純なウィンドウで、いくつかのメッセージが表示され、.exe を閉じるためのボタンが 1 つだけあります。

これは、実行されるメイン スクリプトの最初の行です。私は待って、ユーザーが閉じるをクリックして残りのコードを続行できるようにしたいと考えています。

ただし、プロセスは開始されますが、メイン プログラムは待機せず、残りのコードの実行を開始します。

他に何かする必要がありますか?

4

3 に答える 3

2

この推奨事項はおそらく最善のアプローチではありませんが、プロセスを開始する際に思い浮かびました。秘訣は、他のプロセスが実行中であることをスクリプトに知らせることであり、他のプロセスが終了したことを伝える必要があります。1 つの方法は、EXE が閉じる直前にファイルに書き込むことで通信させることです。スクリプトは、EXE によって入力される特定の出力を待機しているファイルを常に読み取ります。ただし、これは汚いので、別の方法として、Powershell で Windows フォームを使用し、EXE の代わりに PowerShell でフォームを呼び出すこともできます (必要に応じて詳しく説明します)。私の 3 番目の解決策は、おそらく実装が最も簡単ですが、最もクリーンではありません。EXE を起動する前に、すべてのプロセスを取得して配列に格納します。次に、EXE を起動してプロセスを再度取得しますが、今回はその配列にないプロセスを探します。これはおそらくあなたのEXEになります。スクリプトで while ループを探し、そのプロセスがドロップするのを待つことができます。例:

$processes = (Get-Process).Id
Start-Process ".\file.exe"
Start-Sleep -Seconds 1
$exeProc   = (Get-Process).Id | ?{$processes -notcontains $_}
$running   = (Get-Process | ?{$_.Id -match $exeProc}).Id
while($running){
    Start-Sleep -Seconds 1
    $running = (Get-Process | ?{$_.Id -match $exeProc}).Id
}
于 2016-01-29T18:13:59.867 に答える
1

-Wait スイッチを指定しても、Start-Process はプロセス用の新しいウィンドウを作成するようです。

以前に私にとってうまくいったのは、 -NoNewWindow スイッチを Start-Process に追加することです

試す

Start-Process ".\file.exe" -NoNewWindow -Wait
于 2016-12-20T23:16:40.970 に答える