2013-02-06 10 views
5

Also ich habe jede einzelne Antwort zu dieser Frage gelesen, aber keiner von ihnen scheint zu funktionieren.Wie Powershell warten auf die Installation von exe?

$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() 

Danach läuft Ich habe eine Regex Überprüfung der installierten Dateien, die einige bestimmte Zeichenfolgen ersetzt, aber egal was ich versuche, es zu tun:

Ich habe diese Zeilen geht im Skript bekam fährt fort, die Regex-Prüfung auszuführen, während das Programm installiert wird.

Wie kann ich es so machen, dass die nächste Zeile nicht ausgeführt wird, bis die Installation der exe beendet ist? Ich habe auch versucht, ohne Erfolg nach Out-Null zu pumpen.

+0

ich, dass der Installateur Laich für einen anderen Prozess vermuten würde die Installation machen. –

Antwort

8

habe ich einen Test ausführbare Datei, die die folgende

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

Dann dieses Powershell-Skript geschrieben, das als wartet auf die exe erwartet laufen zu beenden, bevor Sie den Text „Ende der ps1“ und die Zeit

Ausgeben
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 

Die folgende Powershell wartet auch korrekt auf das Beenden der Exe.

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

Das Hinzufügen des WaitForExit-Aufrufs gibt mir diesen Fehler.

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

jedoch funktionierts

$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 

Ich denke, vielleicht verwirren Sie die Start-Process-Powershell-Befehl mit dem .NET-Framework Prozessobjekt

+0

So sieht es aus als wäre der letzte Gewinner. Die ersten beiden schienen überhaupt nicht zu funktionieren. Allerdings habe ich die beiden durcheinander gebracht. Danke für diese Klarstellung. Ich denke, Google ist nicht immer mein Freund. –

Verwandte Themen