5

したがって、この質問に関連するすべての回答を読みましたが、どれも機能していないようです。

スクリプトで次の行を実行しています。

$exe = ".\wls1033_oepe111150_win32.exe"
$AllArgs = @('-mode=silent', '-silent_xml=silent_install.xml', '-log=wls_install.log"')
$check = Start-Process $exe $AllArgs -Wait -Verb runAs
$check.WaitForExit()

これが実行された後、インストールされたファイルに対して正規表現チェックが行われ、特定の文字列が置き換えられますが、何をしようとしても、プログラムのインストール中に正規表現チェックが実行され続けます。

exeのインストールが完了するまで次の行が実行されないようにするにはどうすればよいですか? Out-Null へのパイプも試してみましたが、うまくいきませんでした。

4

1 に答える 1

9

次のことを行うテスト実行可能ファイルを作成しました

    Console.WriteLine("In Exe start" + System.DateTime.Now);
    System.Threading.Thread.Sleep(5000);
    Console.WriteLine("In Exe end" + System.DateTime.Now);

次に、このpowershellスクリプトを書きました.exeが実行を終了するのを待ってから、テキスト「ps1の終わり」と時刻を出力します

push-location "C:\SRC\PowerShell-Wait-For-Exe\bin\Debug";
$exe = "PowerShell-Wait-For-Exe.exe"  
$proc = (Start-Process $exe -PassThru)
$proc | Wait-Process

Write-Host "end of ps1" + (Get-Date).DateTime

次の PowerShell も、exe が終了するのを正しく待機します。

$check = Start-Process $exe $AllArgs -Wait -Verb runas
Write-Host "end of ps1" + (Get-Date).DateTime

WaitForExit 呼び出しを追加すると、このエラーが発生します。

You cannot call a method on a null-valued expression.
At line:2 char:1
+ $check.WaitForExit()
+ ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

ただし、これは機能します

$p = New-Object System.Diagnostics.Process
$pinfo = New-Object System.Diagnostics.ProcessStartInfo("C:\PowerShell-Wait-For-Exe\bin\Debug\PowerShell-Wait-For-Exe.exe","");
$p.StartInfo = $pinfo;
$p.Start();
$p.WaitForExit();
Write-Host "end of ps1" + (Get-Date).DateTime

Start-Process powershell コマンドと .NET フレームワークの Process オブジェクトを混同している可能性があります。

于 2013-02-06T04:45:58.643 に答える