.NET Winforms应用程序是否有标准的自动升级方式?

9
如果您有一个在许多计算机上安装的Winforms应用程序,是否有一种标准的方法来实现自动升级功能?例如,每次启动时,它都会检查网站或Web服务,如果有新版本可用,则下载并安装它?我可以想出如何制作自己的版本,但我想知道是否已经有任何框架可帮助处理这个问题。

我们已经有类似的问题,但这个解释得非常好;-) - Shoban
5个回答

9
+1对ClickOnce答案的支持,但我也想对此发表一些评论:
通常,当有人开始研究ClickOnce时,他们会发现它增加了许多新的限制,限制了应用程序可以执行的操作。他们几乎总是违反其中至少一个限制,并回来声明ClickOnce对他们无效,因为X、Y和Z将不再起作用。
预计这种情况将再次出现,我想花点时间解释一下这些限制的理由以及为什么您可能希望更仔细地查看应用程序的功能方式,而不是编写自己的更新系统或选择其他替代方案。
关键在于要看ClickOnce应用程序的主要用例。这个用例主要是企业工作站,您希望部署一个真正的WinForms业务线应用程序,该应用程序应始终保持最新状态,但在任何情况下都不应允许用户具有管理员对其自己的机器的访问权限。鉴于您谈论的是“安装在大量计算机上的应用程序”,我认为您属于这个范畴。
从这个用例来看,最后一个点尤其重要。最终,ClickOnce应用程序的大多数小限制都需要以下之一:
1.运行时需要管理员访问权限,即使只是短暂的。
2.更新时需要管理员访问权限。
有时不清楚您是否需要该访问权限或为什么您需要该访问权限,但最终通常都是这样。想要向系统注册DLL或更新Program Files文件夹中的文件?这默认需要管理员访问权限。需要安装或更新Windows服务?管理员访问权限。想要运行第三方组件的MSI安装程序?您需要管理员权限才能运行MSI。要在TCP端口上监听?你明白了吧。
最终,您的目标是使即使只具有标准权限的用户也能自动更新您的应用程序...甚至可以透明地更新。否则,您需要额外的IT工作人员参与每次部署。即使您的程序面向大众,这也是一个好主意;它将帮助您避免某些支持问题。选择其他部署系统也不会改变这一点。这些系统通常针对的是消费者机器,其中大多数用户都以管理员身份运行,因此更少地涉及这些问题。

1
你好 Joel, ClickOnce 可以用来实现推送模式的升级吗?我已经使用 ClickOnce 在组织中部署了我们的应用程序,客户必须运行应用程序才能开始获取更新。是否有可用的 API 可以在没有客户端交互的情况下从服务器发送更新(假设所有客户端始终连接到网络)? - theraneman
2
@Theraneman:ClickOnce 可以确保每次运行应用程序时都是最新的。如果用户没有运行应用程序,那么应用程序过期几天有什么关系呢? - Joel Coehoorn
ClickOnce在保护Web服务器端的应用程序.deploy文件方面存在问题。在企业局域网中,可以通过Windows身份验证来克服这个问题,但在公共互联网上,只能通过客户端代理来克服。请参见http://msdn.microsoft.com/en-us/library/aa480721.aspx#adminc_topic10“管理ClickOnce部署”。还有关于通过代理进行身份验证的后续文章。http://bronumski.blogspot.com/2009/06/clickonce-updates-via-authentication.html - user18443

7

你可以尝试使用ClickOnce,我认为它是可能的。


是的,您可以使用ClickOnce实现这一点。 - Hector Minaya
绝对可以使用ClickOnce实现 - 我们尚未在大规模范围内推广,但在相当有限的范围内它运行得非常好。 - Murph
1
+1 ClickOnce非常适合自动更新。我们有一个应用程序安装在100多台PC上,可以轻松使用ClickOnce进行升级。虽然ClickOnce很适合升级,但它确实有其他限制(例如,不可定制的安装程序,不会为所有用户安装,可执行文件被放置在用户配置文件目录中而不是Program Files中,复杂的证书签名系统如果不正确执行可能会破坏升级等)。请确保您的应用程序事先适合ClickOnce模型。 - DCNYAM
感谢NYSystemsAnalyst提供的额外细节。这本可以作为另一个答案… - codeulike
我曾经在使用ClickOnce时遇到过糟糕的经历,但可能是我们使用方法不正确。 - Pierre-Alain Vigeant

2

1
听起来很有趣 - 它是被 ClickOnce 取代了还是旨在实现不同的目标? - codeulike
我并不百分之百确定,但我认为它是较老的版本。至少,在左侧的树形结构中被标注为“已弃用”,针对的是 .Net 1.1,而且“帮助你实现拉模型以自动下载更新”,但我猜测你实际上需要的是“推”模型。 - Joel Coehoorn

1

1

最终我使用了开源的“Conversive Sharp AutoUpdater”,网址为

http://csautoupdater.sourceforge.net/

Sharp AutoUpdater是一个C#组件,可以自动更新您的.NET应用程序。使用XML配置文件,AutoUpdater组件检测软件是否有新版本,下载、解压缩并安装新文件。

它相当简单-它下载一个zip文件并将其解压缩到已安装的应用程序上-但它运行良好,比编写自己的更容易。我认为如果用户没有管理员访问权限,则它处理事情的能力不太好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接