是否可以将 ClickOnce 功能引入现有应用程序?
场景是:1.0 版已经安装在客户端。我想向他们发送一个新的安装包,它将升级到具有 ClickOnce 功能的 1.1,从而使未来的升级“毫不费力”。
除此之外,还有其他解决此类问题的方法吗?
PS:最初的应用程序是用Visual Studio 2005(即.NET 2.0)开发的。我现在正在使用Visual Studio 2008。
是否可以将 ClickOnce 功能引入现有应用程序?
场景是:1.0 版已经安装在客户端。我想向他们发送一个新的安装包,它将升级到具有 ClickOnce 功能的 1.1,从而使未来的升级“毫不费力”。
除此之外,还有其他解决此类问题的方法吗?
PS:最初的应用程序是用Visual Studio 2005(即.NET 2.0)开发的。我现在正在使用Visual Studio 2008。
不,使用标准 ClickOnce 部署方案是不可能的。
ClickOnce 是客户端的沙盒安装。它不会知道已经安装的 1.0 版本。它只是检查它的GUID是否已经通过 ClickOnce 安装,如果是,则更新它,但前提是之前的版本是通过 ClickOnce 部署的。
在您的情况下,如果用户安装了 1.1 版,则两个版本将并排安装。版本 1.0 不会更新,因为 ClickOnce 不知道存在关联,因为它是通过不同的方法部署的。如果他们不再需要 1.0 版,则需要手动将其删除。通过 ClickOnce 部署 1.1 版后,后续更新将正常工作。
不要将 ClickOnce 视为您“包含”的东西,将其视为一种部署方法。
或者:
我应该澄清一下,标准 ClickOnce 部署无法实现您正在寻找的内容。但是,您提到您将向他们发送初始设置文件。在这种情况下,您可能有一种解决方法:
对于后续更新,只需将用户指向“纯”ClickOnce 安装程序包,您的更新应该可以正常工作。
确保在您的客户端环境中非常彻底地测试您的 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 将版本文件复制到输出目录。
每次安装的应用程序运行时,它都会将自己的版本与部署文件夹中的版本文件中的版本进行比较。如果它们不同,请退出应用程序并启动 MSI,我们将其设置为自动删除较旧的应用程序版本。
对于没有任何应用程序部署工具(甚至 AD 应用程序广告)的环境来说,这是一个“穷人的 ClickOnce”,所以我们做了。同样,这种方法对您来说可能不够复杂,但对我们来说效果很好。
祝你好运。
我认为在这种情况下,“最简单”的解决方案是只为 1.1 版本使用 ClickOnce 部署,并且作为应用程序新版本的一部分,有一个默认配置文件,其中包含某种首次运行标志,当它用户第一次运行并看到 first-run 标志,它会查找以前的版本,复制任何现有的配置设置,然后自动卸载以前的版本。
这将需要您进行一些编程,但这是我在以前的工作中确定的解决方案,以执行类似的任务来升级实用程序应用程序以使用 Clickonce,而以前没有它。
我知道的最好的方法是向他们发送一个安装程序:
这样,您将获得合理的升级体验,并且 ClickOnce 可以自行处理升级。