Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 升级现有应用程序以包括ClickOnce_C#_Visual Studio 2008_Deployment_Clickonce_Automated Deploy - Fatal编程技术网

C# 升级现有应用程序以包括ClickOnce

C# 升级现有应用程序以包括ClickOnce,c#,visual-studio-2008,deployment,clickonce,automated-deploy,C#,Visual Studio 2008,Deployment,Clickonce,Automated Deploy,是否可以将ClickOnce功能引入现有应用程序 场景是:1.0版已经安装在客户端上。我想向他们发送一个新的安装包,它将升级到1.1,它具有ClickOnce功能,从而使未来的升级“毫不费力” 除此之外,这类问题还有其他解决方案吗 注:最初的应用程序是用(即,.NET2.0)开发的。我现在正在使用。不,使用标准的ClickOnce部署方案是不可能的 ClickOnce是客户端的沙盒安装。它不知道已经安装的1.0版。它只需检查是否已通过ClickOnce安装了its,如果已安装,则更新它,但前提是

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

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

除此之外,这类问题还有其他解决方案吗


注:最初的应用程序是用(即,.NET2.0)开发的。我现在正在使用。

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

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

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

不要将ClickOnce视为您“包括”的东西,而应将其视为一种部署方法

或者:

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

  • 为安装文件编写脚本以自动删除1.0版安装
  • 编写安装文件脚本以启动ClickOnce安装
  • 对于后续更新,只需将用户指向“纯”ClickOnce安装程序包,您的更新就可以正常运行

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


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

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

  • 卸载当前版本
  • 启动驻留在web上的ClickOnce应用程序

  • 有了这一点,您将有一个合理的升级体验,从那时起,ClickOnce可以自行处理升级。

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

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

    根据场景的复杂性,由于您询问了其他解决方案,因此我们最终使用了类似于这样的“滚动您自己的”方法

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

    生成包含一个自定义步骤,用于自动生成具有新程序集版本的文件

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

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

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


    祝您好运。

    谢谢您的详细回复。ClickOnce听起来确实比它的价值更麻烦。。。我喜欢你自己设计的解决方案。