升级现有应用程序以包含ClickOnce

时间:2009-06-25 17:53:47

标签: c# visual-studio-2008 deployment clickonce automated-deploy

是否可以将ClickOnce功能引入现有应用程序?

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

除此之外,还有其他解决方案吗?

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

4 个答案:

答案 0 :(得分:4)

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

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

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

不要将ClickOnce视为“包括”的内容,将其视为部署方​​法。

<强>可替换地:

我应该澄清一下,标准ClickOnce部署无法满足您的需求。但是,您提到您要向他们发送初始设置文件。在这种情况下,您可能有一个可行的解决方法:

  1. 编写安装文件脚本以自动删除1.0版安装
  2. 编写安装文件脚本以启动ClickOnce安装。
  3. 对于后续更新,只需将用户指向“纯”ClickOnce安装程序包,您的更新应该可以正常工作。

答案 1 :(得分:4)

确保在客户端环境中彻底测试ClickOnce部署。我在这里省略了细节,但ClickOnce存在许多问题。我已经支持ClickOnce应用程序已有3。5年了,并且遇到了许多清单问题,不得不手动删除沙盒存储文件夹以便更新安装正确等等 - 如果你在线搜索ClickOnce问题,你会发现很多在MSDN论坛和其他地方很少出现问题,其中很多MS似乎都不想解决,因为它们自Visual Studio 2005以来一直处于打开状态。

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

根据您的场景的复杂程度,由于您询问其他解决方案,我们最终使用“滚动您自己”的方法,就像这样。

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

Build包含一个自定义步骤,可以使用新的程序集版本自动生成文件。

部署项目使用MSI将版本文件复制到输出目录。

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

对于没有任何应用程序部署工具(甚至不是AD应用程序广告)的环境,这是一个“穷人的ClickOnce”,所以我们做了。同样,这种方法对你来说可能不够复杂,但对我们来说效果很好。

祝你好运。

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

我知道的最好方法是向他们发送一个安装程序:

  1. 卸载当前版本
  2. 启动驻留在网络上的ClickOnce应用程序。
  3. 有了这个,您将获得合理的升级体验,ClickOnce可以自行处理升级。