2013-02-06 14 views
5

Vì vậy, tôi đã đọc từng câu trả lời duy nhất liên quan đến câu hỏi này nhưng không có câu nào trong số họ có vẻ đang hoạt động.Làm thế nào để thực hiện PowerShell chờ đợi cho exe để cài đặt?

Tôi đã có những dòng này xảy ra trong kịch bản:

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

Sau này chạy tôi có một tấm séc regex trên các tập tin cài đặt mà thay thế một số chuỗi cụ thể, nhưng không có vấn đề gì tôi cố gắng để làm điều đó tiếp tục chạy kiểm tra regex trong khi chương trình đang cài đặt.

Tôi làm cách nào để dòng tiếp theo không thực thi cho đến khi hoàn tất cài đặt exe? Tôi cũng đã thử đường ống đến Out-Null mà không có may mắn.

+0

tôi sẽ nghi ngờ rằng các spawn cài đặt một quá trình cho đang tiến hành cài đặt. –

Trả lời

8

Tôi tạo ra một thực thi bài kiểm tra đó đã làm như sau

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

Sau đó, viết kịch bản PowerShell này mà như mong đợi chờ cho đến khi exe để kết thúc chạy trước khi xuất văn bản "cuối ps1" và thời gian

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 

Quyền hạn sau đây cũng chính xác chờ cho exe kết thúc.

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

Thêm cuộc gọi WaitForExit cho tôi lỗi này.

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

Tuy nhiên điều này không làm việc

$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 

Tôi nghĩ có lẽ bạn đang bối rối lệnh PowerShell Start-Process với đối tượng .NET Process khuôn khổ

+0

Vì vậy, có vẻ như người cuối cùng là người chiến thắng. Hai người đầu tiên dường như không làm việc gì cả. Tuy nhiên, tôi đã nhận được hai hỗn hợp. Cảm ơn vì đã làm rõ. Tôi đoán google không phải là bạn của tôi suốt thời gian qua. –

Các vấn đề liên quan