如何在 Pascal 脚本 (Inno Setup) 中添加睡眠,该脚本将在提取文件之前执行

Pus*_*der 3 inno-setup pascalscript

我正在尝试制作一个安装程序,它将在安装新安装之前卸载旧安装。

我面临的问题是,卸载程序停止然后删除已安装的服务,删除服务后,Windows 需要 15 秒才能删除该服务,waituntilterminated标志没有帮助,

因为删除服务命令 (Ie service.exe remove) 在 1 秒内完成

我想要的只是添加一个 15 秒的睡眠时间,该睡眠时间将在所有进程完成后[UninstallRun]或实际提取文件之前执行

因为否则卸载程序无法删除所有文件,因为该进程仍在运行 15 秒

因此,重新安装会引发错误,删除文件失败,访问被拒绝,

如果我等待 15 秒然后单击重试,则安装程序能够覆盖旧文件

Mar*_*ryl 5

最简单的解决方案是将睡眠作为卸载命令的一部分。您可以使用该timeout命令

[UninstallRun]
Filename: cmd; Parameters: "/c service.exe remove && timeout /t 15 /nobreak"; \
     Flags: runhidden
Run Code Online (Sandbox Code Playgroud)

更好的方法可能是从eventservice.exe remove执行from Pascal Script 。然后就可以使用该功能了。CurUninstallStepChanged(usPostUninstall)Sleep


不过更好的是检查服务何时真正完成,而不是等待任意时间。

例如,请参阅如何在程序运行时卸载程序,并且仅在用户确认关闭并卸载程序后卸载它 - Inno Setup