You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让C#程序等待PowerShell脚本执行完成?

问题解决:让C#等待SAS任务执行完成

问题原因

当前PowerShell脚本使用Start-Process启动sasoact.exe,而Start-Process默认是异步启动进程——PowerShell脚本会在启动sasoact.exe后立即执行完毕并退出,所以C#中的WaitForExit()只会等待PowerShell进程结束,而非SAS任务的完成,导致进程直接返回退出码0。

解决方案

方案1:修改PowerShell脚本,让Start-Process等待进程完成

在Start-Process命令中添加-Wait参数,强制PowerShell等待sasoact.exe执行完毕后再退出脚本:

Start-Process "C:\Program Files\SASHome\SASFoundation\9.4\core\sasexe\sasoact.exe" -ArgumentList "action=Submit datatype=SASFile filename=""C:\MyProject\test.sas"" progid=SAS.Application.940" -Wait

如果需要将sasoact.exe的退出码返回给C#,可以结合-PassThru参数获取进程对象,再退出时返回其退出码:

$sasProcess = Start-Process "C:\Program Files\SASHome\SASFoundation\9.4\core\sasexe\sasoact.exe" -ArgumentList "action=Submit datatype=SASFile filename=""C:\MyProject\test.sas"" progid=SAS.Application.940" -Wait -PassThru
exit $sasProcess.ExitCode

方案2:直接同步调用sasoact.exe(无需Start-Process)

如果sasoact.exe支持直接在PowerShell中同步执行,可以去掉Start-Process,用调用操作符&直接启动,PowerShell会自动等待进程完成:

& "C:\Program Files\SASHome\SASFoundation\9.4\core\sasexe\sasoact.exe" "action=Submit datatype=SASFile filename=""C:\MyProject\test.sas"" progid=SAS.Application.940"
exit $LASTEXITCODE

$LASTEXITCODE会保存上一个外部进程的退出码,脚本返回该值后,C#就能通过process.ExitCode获取SAS任务的执行状态。

验证效果

修改PowerShell脚本后,C#中的process.WaitForExit()会等待PowerShell脚本执行完成(即SAS任务结束),再返回对应的退出码,实现你需要的等待逻辑。

内容的提问来源于stack exchange,提问作者Ullan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 18:07:13