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