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

Windows installer 自动更新windows应用程序的最佳方法是什么?,windows-installer,auto-update,Windows Installer,Auto Update,谷歌浏览器自动更新自己。我想在我自己的应用程序中克隆这个确切的功能。在Windows上实现此功能的最佳方法是什么?要复制此更新行为,您需要两件事: 定期检查更新的更新程序应用程序。如果发现更新,则应自动安装。大多数商业设置创作工具都包含良好的更新程序应用程序。你可以试着自己编写一个更新程序,但这并不像听起来那么容易 每个产品版本的按用户安装。每用户安装只在用户配置文件文件夹(AppData、Roaming文件夹等)和HKEY_当前用户中写入数据。没有程序文件或HKEY_本地机器 需要按用户安装,

谷歌浏览器自动更新自己。我想在我自己的应用程序中克隆这个确切的功能。在Windows上实现此功能的最佳方法是什么?

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

  • 定期检查更新的更新程序应用程序。如果发现更新,则应自动安装。大多数商业设置创作工具都包含良好的更新程序应用程序。你可以试着自己编写一个更新程序,但这并不像听起来那么容易

  • 每个产品版本的按用户安装。每用户安装只在用户配置文件文件夹(AppData、Roaming文件夹等)和HKEY_当前用户中写入数据。没有程序文件或HKEY_本地机器

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

    更新程序

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

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

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

    其他需要考虑的事情是:

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

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

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

    • 检测正在运行的应用程序
    • 更新资源
    • 更新产品信息(控制面板中的快捷方式、程序和功能小程序等)
    安装包还简化了更新程序应用程序。对于这种类型的更新,更新程序只需要检测可用的更新,下载并执行它们

    更新有两种方式:

    • :旧版本在安装新版本之前已完全卸载
    • :旧版本已修补
    Windows Installer对这两者都有很好的支持,因此您可以使用和。它还支持静默安装,因此更新程序需要做的就是使用命令行参数执行包

    这些包还支持通过属性按用户或每台机器安装

    更新发行版

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

    • 通知更新程序更新可用的方法(例如服务器上的更新信息文件)
    • 检测是否安装了更新的方法(因此只安装一次)
    所有这些都不是很容易。这就是许多产品使用第三方更新程序的原因。甚至一些商业设置创作工具也为您的软件包提供更新程序


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

    如果你想拥有完全相同的功能,你可以。谷歌已经将其开源


    试试winsparkle-。这是一个C++库。< /p>让它成为一个WebApp?每5小时运行一次更新代码?如果我的回答中遗漏了什么,请告诉我。一条评论:我建议避免使用持久更新程序,而是使用任务计划程序定期运行。回答很好。。。但是跨平台需求呢?通常客户端更新程序应用程序是特定于平台的。因此,每个平台都需要不同的更新程序。服务器部分对于所有平台都是相同的。@CosminPirvu但是,msp太难可靠地使用,而且通常整个msi包(包括cab文件)太大,无法通过web交付。因此,我认为上面建议的两种更新方式都不适合我。你是怎么想的?不幸的是,MSP补丁是唯一一种可以在基于MSI的安装中开箱即用的小型更新。它们仅适用于较小的更改(例如,几个文件)。但是,如果您不尝试在它们中包含大量安装程序逻辑,它们确实可以工作。另一种方法是创建自己的安装程序和更新。这通常不是一项容易的任务。然而,这个项目似乎不再更新了……这个项目有更新吗?我试着使用它,但是它很难配置,而且看起来这个项目已经被谷歌终止了。有什么见解吗?最近它看到了更多的更新。它肯定没有停产。我认为谷歌只是在内部开发,向公众发布他们内部拥有的东西“缓慢”@PriteshAcharya我写了一个教程,可以让配置变得更容易:这能处理更新作为服务运行的应用程序吗?我读了一些,但没有看到这个功能。