service - 如果有挂起的 Windows 重新启动,Inno Setup 不会重新启动服务
问题描述
我们创建了一个 Inno Setup 脚本来安装和更新 Windows 服务。可以手动使用相同的安装程序,也可以从自动安装/更新解决方案中使用。
使用安装程序更新现有安装时,安装程序会在更新之前正确终止正在运行的服务进程。此服务依赖于 Windows 重新启动管理器自动重新启动,并且 Inno Setup 能够在安装完成后重新启动它。
在某些情况下,使用安装程序部署的某些文件无法即时更新,因为它们需要重新启动 Windows 才能完成。我们决定不强制系统重启,并请尽快提示用户重启。一切都按预期工作,除了 Inno Setup 由于等待 Windows 重新启动而取消服务重新启动,即使重新启动后没有需要更新的直接进程依赖项也是如此。
从 Inno 设置日志:
Need to restart Windows, not attempting to restart applications
虽然这可能有逻辑,但服务没有自动重新启动这一事实代表了我们场景中的一个问题,即强制用户立即重新启动,这不是我们想要的。
这是命令行参数:/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /RESTARTEXITCODE=123456 /RESTARTAPPLICATIONS
/RESTARTAPPLICATIONS 命令行标志对此行为没有影响,因为无论该标志是否存在,只要没有挂起的重新启动,服务应用程序都会正确重新启动。
一种解决方案可能是在 Run 部分调用外部脚本或使用 Pascal 代码重新启动服务,但我们希望尽可能避免它。
我们错过了什么吗?即使有挂起的重新启动,是否有办法让服务重新启动始终成功?
解决方案
推荐阅读
- typescript - 通过序数索引打字稿获取枚举值
- java - 创建一个显示文本文件内容的类以控制台进行一些更改
- javascript - 创建一个 covid-19 应用程序并遇到动态 API 的问题
- python-3.x - 使用 NN 进行回归的 Numpy 实现
- python - 用于捕获曲目的 Spotify URI 或 Web 链接的正则表达式字符串
- sql - 如何有效地识别特定列的不同记录
- ios - 如何为谷歌地图中心按钮分配明暗模式?
- javascript - Semantic UI React Segment 的前端溢出
- flutter - 在颤动中将数据从小部件发送到另一个小部件
- python - 使用 torch.optim 时带有 torch.mm 的函数显示错误