如何最好地在Windows上实施软件更新?
我想为Windows应用程序实现"自动更新"系统。
现在,我正在半手工创建一个" appcast",我的程序会检查该" appcast",并通知用户有新版本可用。 (我正在使用
适用于我的安装程序的NSIS)。
我是否可以使用可以处理更新的"自动"部分的软件,也许类似于Mac上的Sparkle?我应该注意的任何问题/陷阱?
解决方案
回答
如果应用程序是用.Net编写的,则可以尝试ClickOnce。但是,使用这种方法很难在安装过程中执行管理或者自定义操作。
回答
对于.NET,前阵子Microsoft Patterns + Practices发布了Application Updater Block。 (在我看来)这是过分夸张和过度设计的,但是做得很好。
实质上,它使用"存根加载器"检查清单和Web服务以查看是否有比所安装的程序更高的程序版本,然后使用BITS后台下载器技术下载新版本(如果有)。服务器。
一旦下载并安装了新版本(使用.NET,就像将xcopy复制到相关文件夹一样简单),应用程序将更新清单。下次加载程序时,将启动新版本。
尽管Patterns + Practices代码是.NET特定的,但对于非.NET应用程序,没有任何内容无法复制,尤其是如果我们能够在后台静默运行安装过程。
回答
没有比Sparkle(我知道)还要平滑的解决方案。
如果我们需要轻松的方法来部署和更新应用程序,则可以选择ClickOnce。不幸的是,它不灵活(例如,没有按机器安装而不是按用户安装),不透明(我们几乎没有影响力和清晰度,无法控制其实际部署方式)和非标准(将安装的应用程序存储在其中的路径)与Windows上的其他工具不同)。
WiT的辅助项目ClickThrough更接近要求,但我不确定它仍在开发中(如果确实如此,他们应该对此更加清楚),并且无论如何都将使用MSI,而不是NSIS。
我们最好自己动手做一些事情。我很想看到Windows的Sparkle风格的项目,但到目前为止,似乎没人给它一个机会。
回答
我问了类似的问题。点击链接以查看响应。
自我更新
回答
刚从我对同一主题的问题的回答中得出,我在我的问题中提到了另一个更新解决方案。它使用存根加载器和xml文件指向最新的可执行文件。
回答
现在有了Sparkle的Windows端口,请访问http://winsparkle.org。
回答
使用第三方解决方案是一个好主意,因为自动更新可能会很麻烦,尤其是对于Windows Vista / 7(UAC)。就其价值而言,我公司使用的产品是AutoUpdate +,并且似乎运行良好。
回答
Google Chrome自动更新基于Omaha:
http://code.google.com/p/omaha/
他们的概述中有很大一部分说明了为什么需要它:
The browser typically prompted the user with a long series of techy, confusing and scary dialogs all trying to convince the user not to install. Then the user was prompted with a wizard filled with choices that they did not need to or know how to decide amongst. These factors combined to form a bad user experience and large drop-off during the app installation process