29

我们正在开发一个非常复杂的系统,该系统由多个 WCF 服务、ASP.NET MVC 应用程序、管理工具(Windows 窗体应用程序)组成......其中一些将在多个服务器上运行实例。我们正在为这样的系统寻找一个好的自动更新解决方案。最有可能的是,我们需要一个单独的自动更新应用程序(服务)来完成这项工作,或者需要一些集中的管理应用程序来了解所有已安装实例的版本并远程进行更新。是否有任何你知道或有经验的为此目的而制作的好产品/库?

4

5 回答 5

46

就我个人而言,我对任何类型的自动更新都使用了一种非常简单的方法:

  • 有安装程序
  • 检查新版本(简单的 WebClient 并将数字与您当前的 AssemblyVersion 进行比较)
  • 如果版本更高,请下载最新的安装程序(出于安全原因,应通过 SSL)
  • 运行下载的安装程序并关闭应用程序。(如果您的安装程序要求您成为管理员,则在此阶段您需要拥有管理员权限)

安装人员应负责其余的工作。这样,您将始终拥有最新版本和具有最新版本的安装程序。

于 2009-05-04T11:28:42.663 回答
29

首先让我说我是拥有完整更新解决方案的公司的创始人,其中包括:

wyUpdate 可处理所有 Vista/Windows 7 UAC 问题以及在您尝试更新复杂软件时不可避免地出现的所有文件权限问题。

我们还为开源项目提供免费的 wyBuild 许可证,但如果您只是想构建自己的更新程序,您可以自由地蚕食我们的源代码。

话虽如此,如果您想构建自己的更新程序,这里有一些提示:

构建自己的更新程序

一个好的起点是我上面提到的wyUpdateAutomaticUpdater源代码。您可以将其蚕食并将其用于您自己的目的。它包含的一些算法:

  • 完整的 Windows Vista / Windows 7 UAC 支持
  • 有限用户能够检查然后更新他们是否有凭据
  • 支持不稳定的企业内部网。(如果您曾经与一家公司合作过,这是一个真正的问题)。
  • 快速提取、修补和安装文件。
  • 注册表支持。
  • 在用户出错或取消时回滚文件和注册表
  • 自我更新(不留下任何文件)

我们这里也有文件规范

自动更新

由于自动化是一项要求,让我告诉您我们如何使用AutomaticUpdater 控件来做到这一点。

我们使用命名管道在独立更新程序 (wyUpdate) 和位于程序窗体上的自动更新程序控件之间进行通信。wyUpdate 向 Automatic Updater 报告进度,Automatic Updater 可以告诉 wyUpdate 取消进度、开始下载、开始解压等。

这使更新程序与您的应用程序分开。

事实上,我们使用的确切命名管道 C# 代码包含在我不久前写的一篇文章中:Multi-process C# app like Google Chrome

于 2010-02-23T21:09:45.137 回答
6

这是我为解决我们对 WinForms 和 WPF 应用程序的特定需求而编写的一个开源解决方案。总体思路是以尽可能低的开销获得最大的灵活性。

因此,集成非常简单,该库几乎可以为您完成所有工作,包括同步操作。它也非常灵活,可以让您确定要执行哪些任务以及在什么条件下执行 - 您制定规则(或使用一些已经存在的规则)。最后一点是对任何更新源(网络、BitTorrent 等)和任何提要格式的支持——任何未实现的内容您都可以自己编写。

还支持冷更新(需要重新启动应用程序),并且会自动完成,除非为任务指定“热交换”。

这归结为一个 DLL,大小不到 70kb。

更多详情请访问http://www.code972.com/blog/2010/08/nappupdate-application-auto-update-framework-for-dotnet/

代码位于http://github.com/synhershko/NAppUpdate(在 Apache 2.0 许可下获得许可)

当我有更多时间时,我计划进一步扩展它,但老实说,你应该能够自己快速增强它,以应对它目前不支持的任何东西。

自动更新 WCF 服务和 ASP.NET 网站应该也可以使用它,在必要时使用文件的“热交换”和“iisreset”任务。

于 2010-08-24T22:37:15.453 回答
2

我们调查了一些选项,并决定将AppLife 更新库用于我们的企业项目。

AppLife Update 可以快速轻松地为您的 .NET 应用程序添加自动更新功能,但由于它的综合 API 也很灵活。

在他们的网站上查看完整的功能列表和一些演示视频。

于 2009-06-17T12:48:17.763 回答
1

对于简单的 WPF 应用程序,那些可能使用 Xcopy 安装的应用程序,您可以使用这个 AppUpdater 模块。它是一个源模块,只需几行代码,即可为简单的 WPF 应用程序添加更新功能。

免费。

于 2009-08-11T20:15:00.637 回答