谷歌 Chrome 自动更新 每五小时一次。我想在我自己的应用程序中克隆这个确切的功能。在 Windows 上实现此功能的方法是什么?
要复制这种更新行为,您需要两件事:
定期检查更新的更新应用程序。如果找到一个更新,它应该自动安装。大多数商业设置创作工具都包括良好的更新程序应用程序。您可以尝试自己编写一个更新程序,但它并不像听起来那么简单。
每个产品版本的每个用户安装。每个用户的安装只在用户配置文件夹(AppData、漫游文件夹等)和 HKEY _ CURRENT _ USER 中写入数据。没有程序文件或 HKEY _ LOCAL _ MACHINE。
需要按用户安装,以便您可以悄悄地执行升级。如果安装是针对每台机器的,新的 Windows 版本将显示提升提示,用户不会知道发生了什么。
更新器
一些更新者使用服务。对于自动更新,这不是一个真正的解决方案,因为服务安装需要管理员特权。因此,您的安装过程和随后的更新将显示升级提示。
另一种方法是使用针对每个用户的 Updater 应用程序。它不需要任何升级,可以安装在应用程序文件夹中。这种类型的更新程序可以作为计划任务运行,也可以从应用程序内部运行(在应用程序启动时执行)。
在这两种情况下,您都需要考虑 Updater 可能需要更新自身。因此执行更新的进程必须是临时进程(例如,更新程序的临时副本)。它也应该在没有海拔的情况下运行。这就是为什么服务不是一个好主意的原因。它需要在更新之前停止自己,使用一个处理更新的临时流程,并在完成后重新启动。
其他需要考虑的因素包括:
更新
一个常见的误解是,更新应该是应用程序文件(如主应用程序 EXE)。这种情况很少发生,因为更新可能需要覆盖的不仅仅是文件。
大多数更新是安装包(例如 MSI)或补丁(MSP)。这是最好的方法,因为它们处理整个更新逻辑:
安装包还简化了 Updater 应用程序。对于这种类型的更新,Updater 只需要检测可用的更新、下载并执行它们。
更新以两种方式起作用:
Windows Installer 对两者都有很好的支持,所以你可以使用 MSI 软件包和 MSP 贴片。它还支持静默安装,因此 Updater 所需要做的就是使用命令行参数执行包。
这些包还通过 诱惑者属性支持每个用户或每台计算机的安装。
更新分发
在决定了 Updater 和一些更新包之后,还需要一种分发机制:
这一切并不容易。这就是为什么很多产品使用第三方更新程序。甚至一些商业设置创作工具也为您的软件包提供了更新程序。
一个定制的更新程序主要被拥有大量产品的大公司使用,因为这些投资对他们来说是值得的。
如果你想拥有完全相同的功能,你可以。谷歌已经开源了。
Https://github.com/google/omaha
试试 winSparkle-https://github.com/vslavik/winsparkle,这是个 c + + 库。