如何像 Google Chrome 那样自动更新 Windows 应用程序?

谷歌 Chrome 自动更新 每五小时一次。我想在我自己的应用程序中克隆这个确切的功能。在 Windows 上实现此功能的方法是什么?

40797 次浏览

要复制这种更新行为,您需要两件事:

  1. 定期检查更新的更新应用程序。如果找到一个更新,它应该自动安装。大多数商业设置创作工具都包括良好的更新程序应用程序。您可以尝试自己编写一个更新程序,但它并不像听起来那么简单。

  2. 每个产品版本的每个用户安装。每个用户的安装只在用户配置文件夹(AppData、漫游文件夹等)和 HKEY _ CURRENT _ USER 中写入数据。没有程序文件或 HKEY _ LOCAL _ MACHINE。

需要按用户安装,以便您可以悄悄地执行升级。如果安装是针对每台机器的,新的 Windows 版本将显示提升提示,用户不会知道发生了什么。

更新器

一些更新者使用服务。对于自动更新,这不是一个真正的解决方案,因为服务安装需要管理员特权。因此,您的安装过程和随后的更新将显示升级提示。

另一种方法是使用针对每个用户的 Updater 应用程序。它不需要任何升级,可以安装在应用程序文件夹中。这种类型的更新程序可以作为计划任务运行,也可以从应用程序内部运行(在应用程序启动时执行)。

在这两种情况下,您都需要考虑 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 + + 库。