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

How to add Sleep In Pascal Script (Inno Setup) which will execute before Extraction of Files

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

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

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

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

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

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

如果我等待 15 秒然后点击重试,那么安装程序可以覆盖旧文件

最简单的解决方案是让睡眠成为卸载命令的一部分。您可以使用 timeout command.

[UninstallRun]
Filename: cmd; Parameters: "/c service.exe remove && timeout /t 15 /nobreak"; \
     Flags: runhidden

更好的方法可能是从 Pascal 脚本执行 service.exe remove,从 CurUninstallStepChanged(usPostUninstall) event. Then you can use the Sleep function.


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

参见示例 How to uninstall the program when it is running and only after the user's confirmation to close and uninstall it - Inno Setup