启动进程 - 等待不工作

Start-Process -Wait Not Working

我有调用另一个 .exe 文件的 powershell 脚本。 Start-Process ".\file.exe" -wait

file.exe 是一个带有一些消息的简单 windows,并且只有一个按钮可以关闭 .exe。

这是主脚本运行的第一行。我想等待并让用户单击关闭以继续执行其余代码。

然而,进程启动了,但主程序没有等待并开始执行剩余的代码。

我还需要做些什么吗?

此建议可能不是最佳方法,但在启动流程时想到了这一点。诀窍是让脚本知道另一个进程是 运行,并且必须传达另一个进程已经完成。一种方法是让 EXE 在关闭前通过写入文件进行通信,脚本不断读取文件,等待 EXE 输入的特定输出。但这很脏,所以另一种方法是在 Powershell 中使用 Windows 表单并在 PowerShell 中调用表单而不是 EXE(如果需要我可以详细说明)。我的第三个解决方案可能是最容易实现的,但不是最干净的。在启动 EXE 之前,获取所有进程并将它们存储在一个数组中。然后我将启动 EXE 并再次获取进程,但这次寻找不在该数组中的进程。这可能是您的 EXE,您可以让脚本在 while 循环中查找它并等待该进程结束。示例:

$processes = (Get-Process).Id
Start-Process ".\file.exe"
Start-Sleep -Seconds 1
$exeProc   = (Get-Process).Id | ?{$processes -notcontains $_}
$running   = (Get-Process | ?{$_.Id -match $exeProc}).Id
while($running){
    Start-Sleep -Seconds 1
    $running = (Get-Process | ?{$_.Id -match $exeProc}).Id
}

Start-Process 似乎为进程创建了一个新的 window,即使您指定了 -Wait 开关。

之前对我有用的是将 -NoNewWindow 开关添加到 Start-Process

尝试

Start-Process ".\file.exe" -NoNewWindow -Wait

不确定这是否是您要查找的内容,但您可以使用 NSI 包装器 运行 使用 ExecWait "powershell -File .\file.exe" 的第一个脚本应该可以完成工作。

运行 之后的任何其他脚本都可以满足您的需求。