Inno Setup生成的exe:PowerShell静默安装挂起,CMD正常的问题咨询
解决Inno Setup安装程序在PowerShell中挂起的问题
针对你遇到的情况,这里有几个可行的方案:
1. 改用Wait-Process替代Start-Process -Wait
PowerShell的Start-Process -Wait会等待目标进程及其所有子进程退出,而CMD的start /wait仅等待直接启动的父进程。由于安装程序最后启动了服务(属于子进程),导致PowerShell一直挂起。你可以换用以下方式,只监控安装程序本身的进程:
$installer = Start-Process C:\updatefile.exe -ArgumentList "/VERYSILENT" -PassThru Wait-Process -Id $installer.Id
这样PowerShell只会等待安装程序主进程结束,不会被启动的服务进程卡住。
2. 用Inno Setup参数阻止安装后启动服务
先查看该安装程序的可用参数,执行以下命令获取帮助:
C:\updatefile.exe /?
通常Inno Setup生成的安装包会支持/NORESTART(阻止系统重启),部分程序还会有自定义参数比如/NOSERVICE来跳过服务启动步骤。如果找到对应参数,直接加到命令里:
Start-Process -Wait C:\updatefile.exe "/VERYSILENT /NOSERVICE"
这样安装完成后不会启动服务,自然不会导致PowerShell挂起。
3. Dockerfile中的适配方案
在Dockerfile中执行安装时,建议用PowerShell脚本的方式,比如:
RUN powershell -Command "$installer = Start-Process C:\updatefile.exe -ArgumentList '/VERYSILENT' -PassThru; Wait-Process -Id $installer.Id"
避免直接用CMD方式的兼容性问题,同时确保安装完成后PowerShell能正常退出,容器构建不会失败。
内容的提问来源于stack exchange,提问作者murmansk
相关产品推荐
相关产品推荐

