2

是否可以将ClickOnce功能引入到现有应用程序中?升级现有应用程序以包含ClickOnce

这种情况是:版本1.0已经安装在客户端。我想向他们发送一个新的安装程序包,它将升级到1.1,它具有ClickOnce功能,从而使未来的升级“毫不费力”。

除此之外,有没有其他解决方案来解决这类问题?

P.S .:原始应用程序是用Visual Studio 2005(即.NET 2.0)开发的。我现在使用Visual Studio 2008

回答

4

不,使用标准的ClickOnce部署方案是不可能的。

ClickOnce是客户端的沙盒安装。它不会知道已安装的版本1.0。它只是检查GUID是否已经通过ClickOnce安装,如果是,请更新它,但前提是通过ClickOnce部署了以前的版本。

在你的情况下,如果用户安装了版本1.1,两个版本将并排安装。版本1.0将不会更新,因为ClickOnce不知道有关联,因为它是通过不同的方法部署的。如果他们不再需要版本1.0,他们需要手动删除它。一旦你通过ClickOnce部署了1.1版本,后续的更新将会正常工作。

不要将ClickOnce看作是“包括”的东西,将其视为部署方​​法。

或者:

我要澄清,你要寻找什么是不可能与标准的ClickOnce部署。但是,您提到您将向他们发送初始安装文件。在这种情况下,你可能有一个解决方法这是可能的:

  1. 脚本安装文件,删除版本1.0安装程序会自动
  2. 脚本安装文件,启动安装ClickOnce的。

对于后续更新,只需将用户指向“纯”ClickOnce安装程序包,并且更新应该正常工作。

2

我认为在这种情况下,“最简单”的解决方案就是使用ClickOnce 1.1版本的部署,并且作为应用程序新版本的一部分,它有一个默认配置文件,其中包含某种初始运行标志当用户第一次运行并看到第一次运行标志时,它会查找以前的版本,复制任何现有的配置设置,然后自动卸载以前的版本。

这将需要您的一些编程,但这是我在之前的工作中解决的解决方案,以执行类似的任务来升级实用程序应用程序以使用之前没有的Clickonce。

2

我所知道的最好的办法是给他们一个安装程序:

  1. 卸载当前版本
  2. 启动驻留在网络上的ClickOnce应用程序。

有了这个,你会有一个合理的升级经验,从那里出来,ClickOnce可以自己处理升级。

4

确保在您的客户环境中非常全面地测试您的ClickOnce部署。我在此省略细节,但ClickOnce存在许多问题。我一直支持3.5年的ClickOnce应用程序,并遇到许多有关清单的问题,必须手动删除沙盒存储文件夹,以便正确安装更新等。 - 如果您在线搜索ClickOnce问题,您会发现很多MSDN论坛和其他地方很少出现问题,其中许多MS自从Visual   Studio   2005.之后似乎并未解决。

此外,请注意ClickOnce之前的潜在问题。 NET 3.5 SP1。如果客户端计算机识别的CA中没有自己的软件部署证书,则Visual Studio将使用一个“临时”证书(* .pfx),该证书将在创建后一年过期。此后,后续更新版本可能无法安装,并会向用户显示有关证书过期的可怕消息。微软在.NET 3.5 SP1中解决了这个问题,但是你必须仔细阅读发行说明以找到不再需要临时或永久证书的评论。因此 - 如果您没有公共CA证书,并且您将支持此应用程序一段时间,请确保您使用的是.NET 3.5 SP1。

根据您的情况的复杂性,因为你问其他的解决方案,我们结束了使用“滚你自己”的办法,是这样的。

每个更新的版本都会根据需要增加程序集版本。

版本包含一个自定义步骤来自动生成新的装配版本的文件。

部署项目将版本文件复制到带有MSI的输出目录。

每个已安装的应用程序运行时,它自己的版本进行比较,以在部署文件夹的版本文件的版本。如果它们不同,请退出应用程序并启动MSI,我们将其设置为自动删除较旧的应用程序版本。

这是一个“穷人的ClickOnce的”为在没有应用程序部署工具AVL任何(甚至不是AD应用广告),所以我们就做了一个环境。再一次,这种方法对你来说可能不够成熟,但对我们来说工作得很好。

祝你好运。

+1

感谢您的详细回复。 ClickOnce的确听起来像是比它更值得的麻烦......我喜欢你的本土解决方案。 – pufferfish 2009-08-02 20:37:00

相关问题