【问题标题】:Deployment and automating update部署和自动更新
【发布时间】:2010-11-10 21:43:49
【问题描述】:

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

【问题讨论】:

  • 您可能想查看 WiX (wix.sourceforge.net)。它可以帮助您构建 .msi 文件。我似乎记得使用 WiX(我认为它被称为 ClickThrough)来帮助解决更新问题。我不知道它是否曾经完全开发过。
  • 谢谢whatknott 我会检查的

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


【解决方案1】:

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

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

还有其他注意事项,但对于大多数人来说,这两个是最重要的。如果您可以解决这些问题,那么 ClickOnce 可能是您的一个选择。

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

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

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

【讨论】:

  • 第二条评论并不完全正确——如果你有应用程序的先决条件(例如特定版本的 .NET),那么 VS 将构建一个引导程序可执行文件,它将在你的应用程序之前下载并运行安装。现在,如果这些先决条件改变,事情就不那么简单了——而且与 ClickOnce 安装本身不同,引导程序通常确实需要管理权限。
  • 调查你和 Richard 所说的 click once 限制,我发现 click once 不适用于我们的应用程序,还有其他机制吗?使用 Web 服务做到这一点的最佳做法是……
  • @Richard Dunlap - 感谢您的评论。你提出了一个很好的观点,我编辑了我的答案以澄清。
【解决方案2】:

这看起来像是对 ClickOnce 的直接使用。您是想使用自动 ClickOnce 更新还是进行程序更新取决于以下几点:

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

  2. 如果设置 ClickOnce 启动后检查更新,则直接进入应用程序,但直到应用程序下次启动时才会部署更新;您当然可以通知用户更新版本现已可用并提供重新启动选项。如果用户最后一次运行旧版本就可以了,这很好。

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

足够让你开始了吗?

【讨论】:

  • 调查你和Whatknott所说的click once限制,我发现click once不适用于我们的应用程序,还有其他机制吗?使用 Web 服务做到这一点的最佳实践是……
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多