部署和自动更新

时间:2009-07-15 05:51:40

标签: .net .net-3.5 deployment installer clickonce

我有WCF客户端服务器应用程序,并为这两个项目创建msi安装项目。 Server是承载WCF服务的Windows服务,客户端是WPF应用程序。现在我需要自动化客户端更新机制。这是在客户端打开它应该检查服务器中是否有更新,如果是下载并安装然后运行。我应该使用点击一次部署吗?是否有标准机制来执行此操作,或者我应该手动实现它?还有什么建议?
编辑
调查点击一次限制,感谢亲爱的响应者,我发现点击一次不适用于我们的应用程序,是否还有其他机制?使用Web服务的最佳实践是什么?
非常感谢

3 个答案:

答案 0 :(得分:2)

ClickOnce是一个很棒的工具。但是,在决定它之前,您应该知道它有一些限制。

  • 它不允许您选择安装应用的位置。它将它们安装在用户配置文件下的模糊位置。是的,这意味着ClickOnce应用程序是按用户下载和安装的,而非计算机
  • 它只是让用户机器上的文件与服务器上的文件保持同步,仅此而已。您无法安装第三方msi文件,注册dll,将程序集安装到GAC等。

还有其他警告,但对于大多数人来说,这两个是最重要的。如果你可以绕过那些,那么ClickOnce可能是你的选择。

尝试时,我只会从Visual Studio发布您的应用程序并使用自我证书。如果您决定使用ClickOnce,您可能希望使用MSBuild或MageUI来生成部署,并且您可能希望从证书颁发机构(如Verisign)购买代码签名证书。

修改
只是想回应@Richard Dunlap的评论。他是对的,您可以在Visual Studio中指定先决条件,它将为您构建一个引导程序。引导程序使用户不必单独下载您的先决条件,以正确的顺序运行它们等。

然而,这主要是VS提供的功能,IMO与ClickOnce分开。 ClickOnce仅限于确保GAC中存在程序集,然后如果不存在则使安装失败。您的引导程序和ClickOnce安装之间实际上没有任何关联。您几乎必须告诉用户,“如果您没有产品x,y或z,请在尝试安装我的应用程序之前运行此引导程序”。 ClickOnce无法检查某些第三方COM产品,并强制用户在运行其应用程序之前安装它。

答案 1 :(得分:1)

这看起来像ClickOnce的简单使用。是否要使用自动ClickOnce更新或执行程序更新取决于以下内容:

  1. 如果在启动之前将ClickOnce设置为检查更新,则首先会获得一个通用的Microsoft框,通知用户应用程序正在检查更新。如果你对此很好,那很好。如果您希望用户首先看到您的启动画面,或者您希望在检查更新的同时运行其他一些启动活动,则可能需要其他选项。

    < / LI>
  2. 如果在启动后将ClickOnce设置为检查更新,则直接进入应用程序,但直到下次应用程序启动时才会部署更新;您当然可以通知用户现在可以使用更新版本并提供重启选项。如果用户可以最后一次运行旧版本,那么效果很好。

  3. 如果这两个选项都会导致问题,那么您可以使用API​​进行编程更新。这就是我们选择做的事情 - 因为我们的ClickOnce应用程序是一个与Web服务通信的表示层客户端,所以我们的客户最好始终运行最新版本的软件。但是,我们希望在应用程序检查更新时使用时间来执行其他内务管理(例如检查与Web服务的连接) - 我们希望用户在等待时查看我们的徽标和公司名称。 : - )

  4. 足够让你入门?

答案 2 :(得分:1)

此博客(http://coffeedrivendevelopment.blogspot.com/2008/09/clickonce-deployment-or-not.html)描述了他决定不使用ClickOnce,以及编写自己的自我更新程序的简单机制。他使用源代码控制来检查新版本,但理论上你可以检查你发布新版本的位置,以及其他一些版本指示符(文本文件,数据库,webservice调用,等等)。