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