如何在PowerShell中调用可执行文件且无需等待其运行结束
PowerShell 异步启动可执行文件解决方案
你之前使用的Invoke-Expression默认会同步执行命令,阻塞当前线程直到命令执行完成,你可以通过以下几种方案实现不阻塞运行exe的需求:
方案1:使用 Start-Process (最常用简便)
Start-Process是PowerShell原生的进程启动命令,默认不会等待进程执行完成,直接返回继续执行后续代码,示例代码如下:
# 后台启动目标exe,不阻塞后续代码执行 Start-Process -FilePath ".\test_vibration.exe" # 此处其他操作会直接运行,不需要等待exe执行结束
如果需要给exe传递启动参数,可添加-ArgumentList参数:
Start-Process -FilePath ".\test_vibration.exe" -ArgumentList "-mode test","-timeout 20"
方案2:使用后台作业(需要后续获取执行结果时使用)
如果你后续需要读取exe的运行输出、退出状态等信息,可以使用Start-Job启动后台作业:
# 启动后台作业运行目标exe $vibrationJob = Start-Job -ScriptBlock { & ".\test_vibration.exe" } # 直接执行后续其他操作 # 若后续需要等待exe执行完成并获取结果,可使用以下代码: # Wait-Job $vibrationJob | Out-Null # $runResult = Receive-Job $vibrationJob
方案3:调用.NET Process 类(精细化控制进程时使用)
如果你需要对进程的生命周期、输入输出流做更精细的控制,可以直接调用.NET的Process类实现:
$exeProcess = New-Object System.Diagnostics.Process $exeProcess.StartInfo.FileName = ".\test_vibration.exe" $exeProcess.StartInfo.UseShellExecute = $true # 启动进程,不阻塞 $exeProcess.Start() | Out-Null # 后续其他操作 # 若后续需要等待进程退出可调用:$exeProcess.WaitForExit()
内容的提问来源于stack exchange,提问作者martorad
相关产品推荐
相关产品推荐

