自动更新Windows应用程序的最佳方法是什么?

时间:2011-09-13 00:37:37

标签: windows-installer auto-update

Google Chrome自动更新every five hours。我想在我自己的应用程序中克隆这个确切的功能。在Windows上实现此功能的最佳方法是什么?

3 个答案:

答案 0 :(得分:80)

要复制此更新行为,您需要做两件事:

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

  2. 每个产品版本的每用户安装。每用户安装仅在用户配置文件文件夹(AppData,漫游文件夹等)和HKEY_CURRENT_USER中写入数据。没有程序文件或HKEY_LOCAL_MACHINE。

  3. 需要按用户安装,以便您可以静默执行升级。如果每台机器安装,则较新的Windows版本将显示提升提示,用户将不知道发生了什么。

    更新程序

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

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

    在这两种情况下,您都需要考虑更新程序可能需要自行更新。因此,执行更新的过程必须是临时过程(例如更新程序应用程序的临时副本)。它也应该没有高程运行。这就是服务不是一个好主意的原因。它需要在更新之前自行停止,使用一个处理更新的临时进程,并在完成后再次启动。

    需要考虑的其他事项是:

    • 权限问题(如果更新过程需要任何权限或提升)
    • 下载位置
    • 更新检测机制(Updater如何检测是否应安装新版本)

    更新

    一个常见的误解是更新应该是应用程序文件(如主应用程序EXE)。这种情况很少发生,因为更新可能需要覆盖的不仅仅是文件。

    大多数更新都是安装包(例如MSI)或补丁(MSP)。这是最好的方法,因为它们处理整个更新逻辑:

    • 检测正在运行的应用程序
    • 更新资源
    • 更新产品信息(控制面板中的快捷方式,程序和功能小程序等)

    安装包还简化了Updater应用程序。通过这种类型的更新,Updater只需检测可用更新,下载并执行它们。

    更新有两种方式:

    Windows Installer对这两者都有很好的支持,因此您可以使用MSI packagesMSP patches。它还支持静默安装,因此您的Updater需要做的就是使用命令行参数执行包。

    这些软件包还通过ALLUSERS属性支持每用户或每台计算机的安装。

    更新分发

    在决定更新程序和某些更新程序包之后,还需要一个分发机制:

    • 一种通知更新程序可用更新的方法(例如服务器上的更新信息文件)
    • 一种检测是否安装了更新的方法(因此它只安装了一次)

    所有这些都不是很容易。这就是许多产品使用第三方更新程序的原因。甚至一些商业设置创作工具也为您的软件包提供更新程序。

    自定义更新程序主要用于拥有大量产品的大型公司,因为投资对他们来说是值得的。

答案 1 :(得分:26)

如果您想拥有完全相同的功能,可以。谷歌开源了它。

https://github.com/google/omaha

答案 2 :(得分:3)

尝试winsparkle - https://github.com/vslavik/winsparkle。这是一个c ++库。