
Ich habe einige Befehle, die nur mit dem Präfix ausgeführt werden können &
.
Sie laufen alle asynchron.
Beispielskript:
& 'C:\Program Files\SomeApp\SomeAppUninstall.exe'/silent
& 'C:\Users\bob\Downloads\SomeApp.exe' /silent
& 'C:\Program Files\someApp.exe' /openGui
Was hier passiert, ist, dass der letzte Befehl zuerst ausgeführt wird, da er am schnellsten ist und das Programm noch installiert ist. Die ersten beiden werden gleichzeitig ausgeführt, was zu einem Konflikt führt.
Ich muss sie offensichtlich nacheinander ausführen.
Aus irgendeinem Grund funktionieren diese Befehle nur, wenn ihnen das vorangestellt ist, &
oder ich erhalte eine Fehlermeldung. Ich vermute, das liegt daran, dass sie Schalter haben.
Wie kann ich das umgehen?
Antwort1
Vor einigen Jahren habe ich eine Powershell-Funktion geschrieben, weil ich die gleiche oder zumindest eine ähnliche Anforderung hatte wie Sie. Wenn ich mich recht erinnere, hat mir diese Funktion gute Dienste geleistet – obwohl ich glaube, dass ich einmal auf ein Problem gestoßen bin, das ich nicht erklären konnte. Die Verwendung erfolgt also auf eigene Gefahr.
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)"
}
}
Antwort2
Das von mir angegebene Beispiel war sehr einfach. Die tatsächlichen Fälle sind etwas komplexer, aber in meinen Fällen wird alle nur ein Argument verwendet.
Ich habe diese einfache Funktion geschrieben:
function Await($path, $arg) {
Start-Process `
-Wait `
-FilePath $path `
-ArgumentList /$arg
}