代码之家  ›  专栏  ›  技术社区  ›  dF.

如何在Windows上最好地实现软件更新?[关闭]

  •  23
  • dF.  · 技术社区  · 16 年前

    我想为Windows应用程序实现一个“自动更新”系统。 现在我正在半手动创建一个 "appcast" 我的程序会检查它,并通知用户有新版本可用。(我正在使用) NSIS 对于我的安装人员)。

    是否有软件可以用来处理更新的“自动”部分,可能类似于 Sparkle 在MAC上?我应该意识到的任何问题/陷阱?

    10 回复  |  直到 11 年前
        1
  •  6
  •   Sören Kuklau Keith Boynton    16 年前

    没有比火花更光滑的解决方案了(我知道)。

    如果您需要一种简单的部署和更新应用程序的方法, ClickOnce 是一种选择。不幸的是,它是不灵活的(例如,没有每台机器安装,而不是每用户),不透明的(您对其部署实际工作方式的影响和清晰度以及控制非常小)和非标准的(它存储已安装应用程序的路径与Windows上的任何其他路径不同)。

    更接近你所要求的 ClickThrough ,的副项目 WiX 但是我不确定它是否还在开发中(如果是的话,他们应该更清楚),而且它在任何情况下都会使用MSI,而不是NSI。

    你最好自己动手。我很想看到一个闪闪发光的窗户项目,但迄今为止似乎没有人给它一个机会。

        2
  •  12
  •   Václav Slavík    14 年前

    现在有一个发光的窗口端口,看 http://winsparkle.org .

        3
  •  5
  •   Mark    14 年前

    谷歌Chrome自动更新基于奥马哈:

    http://code.google.com/p/omaha/

    他们 overview 在需要它的原因上有一个很好的部分:

    浏览器通常会提示用户使用一系列技术性、混乱和可怕的对话框,所有这些对话框都试图说服用户不要安装。然后,系统会提示用户一个向导,其中充满了他们不需要或不知道如何进行选择的选项。这些因素结合在一起形成了一个糟糕的用户体验和应用程序安装过程中的大量下降。

        4
  •  4
  •   LoneRanger    14 年前

    使用第三方解决方案是一个好主意,因为自动更新可能很麻烦,特别是在Windows Vista/7(UAC)中。就其价值而言,我公司使用的产品是 AutoUpdate+ 而且效果还不错。

        5
  •  3
  •   Jeremy McGee    16 年前

    对于.NET,一段时间前,Microsoft Patterns+Practices发布了 Application Updater Block . 这(在我看来)相当夸张和过度设计,但做得相当好。

    本质上,它使用“存根加载器”来检查清单和Web服务,以查看是否有比安装的程序更高的版本可用,然后使用BITS后台下载器技术下载服务器上可用的新版本。

    一旦下载并安装了新版本(使用.NET,这就像Xcopy复制到相关文件夹一样简单),应用程序将更新清单。下次加载程序时,将启动新版本。

    虽然模式+实践代码是特定于.NET的,但是对于非.NET应用程序来说,没有什么是无法复制的,特别是如果您能够在后台静默地运行安装过程。

        6
  •  3
  •   Community chadoh    7 年前

    我问了一个类似的问题。按照链接查看响应。 Self Updating

        7
  •  2
  •   tbreffni    16 年前

    如果您的应用程序是用.NET编写的,您可以尝试 ClickOnce . 但是,使用这种方法在安装期间很难执行管理或自定义操作。

        8
  •  2
  •   yarone    13 年前

    WyUpdate看起来真不错。在这里看到视频: http://wyday.com/wybuild/help/automatic-updates/

        9
  •  1
  •   Helge Klein    13 年前

    对于.NET应用程序,您可能需要查看 NetSparkle 是.NET程序的闪亮变体。这是一个相当新的(从2011年起)和积极发展。

        10
  •  0
  •   Community chadoh    7 年前

    我来这里是为了回答我自己关于同一主题的问题——我提到了另一个。 updating solution 在我的 question . 它使用一个存根加载程序和一个XML文件来指向最新的可执行文件。