mur*_*nsk 3 powershell cmd inno-setup docker
我正在尝试安装使用 Inno Setup 创建的 exe。当我尝试使用 PowerShell 安装它时
Start-Process -wait C:\updatefile.exe /VERYSILENT
Run Code Online (Sandbox Code Playgroud)
所有文件夹都创建在正确的位置,创建注册表值,但控制台挂起并且不会返回,除非Ctrl+C按下 。
但是如果我使用命令提示符安装 exe
start /wait C:\updatefile.exe /VERYSILENT
Run Code Online (Sandbox Code Playgroud)
一切正常,命令提示符返回。
造成这种异常现象的原因可能是什么?
我需要通过 Dockerfile 安装此 exe,但由于 PowerShell 安装挂起,容器不会安装 exe。即使使用cmdDockerfile 中的版本,容器也不会创建安装文件夹。
检查日志后我发现exe服务最终由安装程序启动。如果这是挂起的原因,是否有一些参数可以用来退出 PowerShell?
-WaitPowerShell cmdlet 的切换也会Start-Process等待启动进程的子进程退出[1],而cmd.exe的内部start命令则不会。
Start-Process等待该(子)进程终止确实解释了挂起。这是一个简单的解决方法:
cmd /c C:\updatefile.exe /VERYSILENT
Run Code Online (Sandbox Code Playgroud)
当通过 调用可执行文件时cmd /c,cmd.exe隐式等待直到可执行文件的进程(并且只有它)终止,即使它是 GUI 应用程序,就像会那样start /wait。
鉴于脚注 [1] 中描述的行为,另一种解决方法是使用-PassThruswitch with Start-Process(而不是-Wait) 并将结果通过管道传输到Wait-Process:
Start-Process -PassThru C:\updatefile.exe /VERYSILENT | Wait-Process
Run Code Online (Sandbox Code Playgroud)
[1] 请参阅GitHub 问题 #15555,其中还讨论了Wait-Process不同的行为,即仅等待进程本身终止。
正如zett42Start-Process -Wait指出的那样,现在至少在文档中简要提到了的行为(添加了强调):“等待指定的进程及其后代”。
| 归档时间: |
|
| 查看次数: |
1243 次 |
| 最近记录: |