
Tengo algunos comandos que solo se pueden ejecutar cuando tienen el prefijo &
.
Todos se ejecutan de forma asincrónica.
Guión de ejemplo:
& 'C:\Program Files\SomeApp\SomeAppUninstall.exe'/silent
& 'C:\Users\bob\Downloads\SomeApp.exe' /silent
& 'C:\Program Files\someApp.exe' /openGui
Lo que sucede aquí es que el último comando sucederá primero, ya que es el más rápido y el programa aún está instalado, los primeros 2 se ejecutarán simultáneamente, lo que generará un conflicto.
Necesito que se ejecuten secuencialmente, obviamente.
Por alguna razón, estos comandos solo funcionan si tienen el prefijo &
o recibo un error, sospecho que es porque tienen modificadores.
¿Cómo soluciono esto?
Respuesta1
Hace algunos años, escribí una función de Powershell porque tenía los mismos requisitos o al menos similares a los tuyos. Si no recuerdo mal, esta función me resultó muy útil, aunque creo que una vez tuve un problema que no pude explicar. Por lo tanto, utilícelo bajo su propio riesgo.
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)"
}
}
Respuesta2
El ejemplo que di fue muy simple, los casos reales son un poco más complejos, pero todos mis casos solo usan 1 argumento.
Escribí esta función simple:
function Await($path, $arg) {
Start-Process `
-Wait `
-FilePath $path `
-ArgumentList /$arg
}