
접두사가 붙은 경우에만 실행할 수 있는 몇 가지 명령이 있습니다 &
.
모두 비동기식으로 실행됩니다.
예시 스크립트:
& 'C:\Program Files\SomeApp\SomeAppUninstall.exe'/silent
& 'C:\Users\bob\Downloads\SomeApp.exe' /silent
& 'C:\Program Files\someApp.exe' /openGui
여기서 일어나는 일은 가장 빠르고 프로그램이 여전히 설치되어 있기 때문에 마지막 명령이 먼저 발생하고, 처음 2개가 동시에 실행되어 충돌이 발생한다는 것입니다.
분명히 순차적으로 실행해야합니다.
어떤 이유로 이 명령은 접두사가 붙은 경우에만 작동 &
하거나 오류가 발생하는 경우에만 작동합니다. 스위치가 있기 때문인 것 같습니다.
이 문제를 어떻게 해결하나요?
답변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
제가 제시한 예는 매우 간단했습니다. 실제 사례는 좀 더 복잡하지만 제 사례는 모두 인수를 1개만 사용합니다.
나는 다음과 같은 간단한 함수를 작성했습니다.
function Await($path, $arg) {
Start-Process `
-Wait `
-FilePath $path `
-ArgumentList /$arg
}