2009-07-15 108 views
0

我有WCF客户端服务器应用程序,并为这两个项目的MSI安装项目。服务器是承载WCF服务的Windows服务,客户端是WPF应用程序。现在我有一个自动化客户端更新机制的要求。这是在客户端打开它应该检查服务器中是否有更新,如果是下载并安装,然后运行。我应该使用点击一次部署吗?有没有标准的机制来做到这一点,或者我应该手动实施它?还有其他建议吗?
编辑
调查点击一次的限制,感谢亲爱的responsers,我发现,点击一次不sutuble我们的应用程序,是否有其他的机制呢?什么是与Web服务做到这一点的最佳做法..?
非常感谢部署和自动更新

+0

您可能想查看WiX(http://wix.sourceforge.net)。它可以帮助你建立你的.msi文件。我似乎记得一些与WiX(我认为它被称为ClickThrough)的东西来帮助解决更新。我不知道它是否完全发展。 – codeConcussion 2009-07-23 14:20:41

+0

谢谢whatknott我会检查它 – 2009-07-23 16:44:42

回答

2

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

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

还有其他警告,但这两个是大多数人的大问题。如果你能解决这些问题,那么ClickOnce可能是你的选择。

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

编辑
只是想回应@Richard Dunlap的评论。他是正确的,您可以在Visual Studio中指定先决条件,并为您构建引导程序。引导程序不必单独下载您prereqs,以正确的顺序运行它们,等

然而节省了用户,这在很大程度上只是一种功能,VS提供,并且是国际海事组织,从ClickOnce的独立。 ClickOnce仅限于确保GAC中存在程序集,然后在没有安装的情况下使安装失败。您的引导程序和ClickOnce安装之间确实没有关系。你几乎必须告诉用户:“如果你没有产品x,y或z,请在尝试安装我的应用程序之前运行这个引导程序。”没有什么ClickOnce可以检查某些第三方COM产品,并强制用户在运行应用程序之前安装它。

1

这看起来像一个简单的使用的ClickOnce的。无论您想使用自动的ClickOnce更新或做程序的更新,取决于以下因素:

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

  2. 如果你设置的ClickOnce在启动后检查更新,你直行进入应用程序,但该更新将不会被部署,直到下一次应用程序启动;您当然可以通知用户现在有更新的版本,并提供重新启动选项。如果用户最后一次运行旧版本,那么这很有效。

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

足够让你开始?

+0

调查点击一次您和Whatknott说的限制,我发现点击一次不适用于我们的应用程序,是否有任何其他机制? Hhat是使用Web服务做到这一点的最佳实践... – 2009-07-16 03:49:37

1

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