如何最好地在 Windows 上实现软件更新? [关闭]
Posted
技术标签:
【中文标题】如何最好地在 Windows 上实现软件更新? [关闭]【英文标题】:How to best implement software updates on windows? [closed] 【发布时间】:2010-09-07 09:54:21 【问题描述】:我想为 Windows 应用程序实现“自动更新”系统。 现在我正在半手动创建一个"appcast",我的程序会检查它,并通知用户有新版本可用。 (我正在使用 NSIS 我的安装人员)。
是否有我可以使用的软件来处理更新的“自动”部分,可能类似于 mac 上的Sparkle?我应该注意什么问题/陷阱?
【问题讨论】:
【参考方案1】:wyUpdate 看起来很不错。在这里看视频: http://wyday.com/wybuild/help/automatic-updates/
【讨论】:
【参考方案2】:对于 .NET 应用程序,您可能需要查看 NetSparkle,这是 .NET 程序的 Sparkle 变体。它是相当新的(从 2011 年开始)并且正在积极发展。
【讨论】:
【参考方案3】:Google Chrome 自动更新基于 Omaha:
http://code.google.com/p/omaha/
他们的overview 有一个很好的部分说明为什么需要它:
浏览器通常会通过一系列技术性、令人困惑和可怕的对话框提示用户,所有这些对话框都试图说服用户不要安装。然后用户被提示一个向导,其中充满了他们不需要或不知道如何决定的选项。这些因素加在一起形成了糟糕的用户体验和应用安装过程中的大量下降
【讨论】:
谢谢。奥马哈看起来又大又复杂。 我尝试使用这个,但是配置起来非常困难,而且看起来这个项目已经被 google 停止了。有使用这个项目的经验吗?【参考方案4】:使用第三方解决方案是个好主意,因为自动更新可能会很麻烦,尤其是在 Windows Vista/7 (UAC) 中。值得一提的是,我公司使用的产品是AutoUpdate+,它似乎运作良好。
【讨论】:
【参考方案5】:现在有 Sparkle 的 Windows 端口,请参阅 http://winsparkle.org。
【讨论】:
另一个是 SparkleDotNet,bitbucket.org/ikenndac/sparkledotnet/wiki/Home【参考方案6】:刚刚回答了我自己关于同一主题的问题 - 我在question 中提到了另一个updating solution。它使用一个存根加载器和一个 xml 文件来指向最新的可执行文件。
【讨论】:
【参考方案7】:没有像 Sparkle 一样流畅的解决方案(据我所知)。
如果您需要一种简单的方法来部署和更新应用程序,ClickOnce 是一个选择。不幸的是,它不灵活(例如,没有按机器安装而不是按用户安装)、不透明(您对其部署的实际工作方式几乎没有影响力、清晰度和控制权)和非标准(将安装的应用程序存储在的路径)不同于 Windows 上的其他任何东西)。
更接近您所要求的是ClickThrough,WiX 的一个附带项目,但我不确定它是否仍在开发中(如果是,他们应该更清楚...) - 和在任何情况下它都会使用 MSI,而不是 NSIS。
您最好自己滚动一些东西。我很想看到一个类似 Sparkle 的 Windows 项目,但到目前为止似乎没有人尝试过。
【讨论】:
“ClickThrough 存在重大错误,这些错误都已被归咎于 WiX v4,基本上在此之前导致 ClickThrough 无用。”来源:sourceforge.net/mailarchive/…【参考方案8】:对于 .NET,不久前 Microsoft 模式 + 实践发布了 Application Updater Block。这(在我看来)有点夸大和过度设计,但做得很好。
本质上,它使用“存根加载程序”来检查清单和 Web 服务,以查看是否可以使用比已安装程序更高版本的程序,然后使用 BITS 后台下载器技术下载新版本,如果有的话在服务器上可用。
一旦下载并安装了新版本(对于 .NET,这就像 xcopy 到相关文件夹一样简单),应用程序将更新清单。下次加载程序时,将启动新版本。
虽然 Patterns + Practices 代码是特定于 .NET 的,但对于非 .NET 应用程序,没有什么是无法复制的,尤其是当您能够在后台静默运行安装过程时。
【讨论】:
【参考方案9】:如果您的应用程序是用 .Net 编写的,您可以试试ClickOnce。但是,使用这种方法在安装过程中很难执行管理或自定义操作。
【讨论】:
以上是关于如何最好地在 Windows 上实现软件更新? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章