我有一些命令只有以 为前缀才能运行&
。
它们都异步运行。
示例脚本:
& '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
我给出的例子非常简单,实际的情况要复杂一些,但我的案例都只使用 1 个参数。
我写了这个简单的函数:
function Await($path, $arg) {
Start-Process `
-Wait `
-FilePath $path `
-ArgumentList /$arg
}