我有PowerShell脚本调用另一个.exe文件。
Start-Process ".\file.exe" -wait
file.exe是一个带有一些消息的简单窗口,只有一个按钮可以关闭.exe。
这是主脚本运行的第一行。我想等一下,让用户点击“关闭”以继续执行其余代码。
然而,该过程开始,但主程序不等待并开始执行其余代码。
我还需要做些什么吗?
答案 0 :(得分:2)
这个建议可能不是最好的方法,但在开始一个过程时会浮现在脑海中。诀窍是让脚本知道另一个进程正在运行,并且必须告知其他进程已完成。一种方法是让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
}
答案 1 :(得分:2)
不确定这是否是您正在寻找的,但您可以使用NSI包装器使用ExecWait "powershell -File .\file.exe"
运行第一个脚本,这应该可以完成这项工作。
在此之后运行任何其他脚本,它将执行您正在寻找的内容。
答案 2 :(得分:1)
Start-Process似乎为进程创建了一个新窗口,即使您指定了-Wait开关。
之前对我有用的是将-NoNewWindow开关添加到Start-Process
尝试
Start-Process ".\file.exe" -NoNewWindow -Wait