
У меня есть некоторые команды, которые можно запустить только с префиксом &
.
Все они работают асинхронно.
Пример сценария:
& 'C:\Program Files\SomeApp\SomeAppUninstall.exe'/silent
& 'C:\Users\bob\Downloads\SomeApp.exe' /silent
& 'C:\Program Files\someApp.exe' /openGui
В данном случае происходит следующее: последняя команда будет выполнена первой, так как она самая быстрая, а программа все еще установлена; первые две команды будут выполнены одновременно, что приведет к конфликту.
Мне, очевидно, нужно, чтобы они запускались последовательно.
По какой-то причине эти команды работают только с префиксом &
, иначе я получаю ошибку. Подозреваю, что это из-за того, что у них есть переключатели.
Как это обойти?
решение1
Несколько лет назад я написал функцию Powershell, потому что у меня были такие же или, по крайней мере, похожие требования, как у вас. Если я правильно помню, эта функция хорошо мне послужила - хотя, кажется, однажды я столкнулся с заминкой, которую не смог объяснить. Поэтому используйте ее на свой страх и риск.
function wait-for-process {
param (
[string] $exe,
[string] $arguments
)
$process = new-object System.Diagnostics.Process
$process.StartInfo = new-object System.Diagnostics.ProcessStartInfo
$process.StartInfo.FileName = $exe
$process.StartInfo.Arguments = $arguments
if (-not $process.Start()) {
"Could not start $exe $arguments!"
return
}
$process.WaitForExit()
if ($process.ExitCode) {
"Exit code for $exe $arguments is $($process.ExitCode)"
}
}
решение2
Приведенный мной пример был очень простым, реальные случаи немного сложнее, но во всех моих случаях используется только один аргумент.
Я написал эту простую функцию:
function Await($path, $arg) {
Start-Process `
-Wait `
-FilePath $path `
-ArgumentList /$arg
}