1. ClickOnce简介

微软官方对ClickOnce的解释是:ClickOnce 是一项部署技术,您可以利用这项技术来创建基于 Windows 的自行更新的应用程序,并且安装和运行这类应用程序所需的用户交互最少。

使用用ClickOnce主要解决了程序部署中的几个问题:

  • 更新应用程序困难。使用 Microsoft Windows Installer 部署,每次更新应用程序时,用户都可以安装更新(msp 文件)并将其应用到已安装的产品中;使用 ClickOnce 部署,可自动提供更新。只有更改过的应用程序部分才会被下载,然后会从新的并行文件夹重新安装完整的、更新后的应用程序。
  • 对用户的计算机的影响。使用 Windows Installer 部署时,应用程序通常依赖于共享组件,这便有可能发生版本冲突;而使用 ClickOnce 部署时,每个应用程序都是独立的,不会干扰其他应用程序。
  • 安全权限。Windows Installer 部署要求管理员权限并且只允许受限制的用户安装;而 ClickOnce 部署允许非管理用户安装应用程序并仅授予应用程序所需要的那些代码访问安全性权限。

简单点说就是ClickOnce部署的程序可以自动更新,近乎绿色,且对程序的权限执行权限拥有更细的粒度。

下面是ClickOnce的基本架构图(图片来源

2. 发布站点建立

我们先来看一下使用ClickOnce部署Winform程序后的发布界面,只要点击Install即可从部署的服务器下载程序安装运行了。

所以这里涉及到站点的建立,在Web服务器上建立一个站点以供发布新的ClickOnce包。

在建立站点前,我们需要如下图确认这两个组件是否已经启用。

启用后,建立一个站点,路径选择一个自己建立的空目录即可,其他的Web服务器的设置这里不再赘述。

3. 配置ClickOnce程序

在Winform项目上右键打开属性界面,配置好相关的编译属性,关于编译属性的详细配置可以参见前一篇文章:关于Winform编译配置那些事

切换到发布标签,如下图所示。

在发布目录里面,可以选择Web、FTP、文件路径模式,这里我们填上我们之前配置好的空的Web站点即可。

在安装模式里面,支持两种安装模式:联机或脱机可用性。一般我们选择用户即使在断线的情况下也能使用发布的应用程序。

点击“程序文件”,打开对话框。

这里可以选择哪些文件可以发布到ClickOnce中,以便发布到客户端里面。

默认是将程序编译出的文件包含在ClickOnce包中,这里会遇到一个问题:如何将其他文件如一些说明文档在项目里更新后同时自动打包进部署包里。

比如我们在项目里面添加了一个Readme.txt,默认在我们发布新包时此文件是不会发布进去的。

如果我们需要每次发布进去,只要在Readme.txt上右键打开属性,配置这两个值即可。

而在必要组件对话框里面,ClickOnce会自动分析出需要的必要组件,当然你也可以自己选择必要组件,并可以配置是从供应商的页面下载组件、从我们自己配置的发布路径下载或者其他路径。

使用ClickOnce发布的程序一个最大的特点就是能够自动更新,即当运行的时候发现发布服务器上有新版本后即会自动更新后再运行,当然更新的策略也可以配置,我们打开“更新”对话框。

可以选择在程序启动前还是启动后更新程序。

或者按照时间间隔去检查更新并更新程序。

或者强制用户更新到某个版本。

也可以配置更新包在其他某个路径。

打开“属性”对话框,可以设置一些发布的基本属性。

如发布人、套件名称、程序名称等等,这里的一些设置会影响到部署页面的信息和用户安装后的目录。

当然这里还可以设置如:刻录成CD安装包后是否插入CD就自动运行,是否用户安装后在桌面创建快捷方式等等,可以自己去点开设置自己需要的东西,就不一一介绍了。

还可以设置是自动增加版本号还是自己设置,这里的版本号设置最好遵照版本号的使用原则,否则后期维护起来会很混乱,好的习惯往往会让你事半功倍。

4. 发布ClickOnce包

在发布前,我们再说两个东西,那就是代码访问安全和程序签名。

  • 代码访问安全:ClickOnce 应用程序受 .NET Framework 中代码访问安全性约束的限制,以帮助限制代码访问受保护的资源和操作的权限。 因此,了解代码访问安全性的含义以相应地编写 ClickOnce 应用程序是十分重要的。 您的应用程序可以使用完全信任或使用部分区域(如 Internet 区域和 Intranet 区域)来限制访问权限。
  • 程序签名:ClickOnce 使用证书验证应用程序发行者的真实性,并使用证书为应用程序和部署清单签名,以证明文件未被篡改。 签名是一个可选的步骤,它会使在生成清单以后更改应用程序文件更容易。 然而,在没有签名清单的情况下,很难确保应用程序安装程序在受到中间人安全攻击时不被篡改。 出于这个原因,我们建议您对应用程序清单和部署清单进行签名,以帮助保护您的应用程序。

这部分的解释和详细介绍可以看MSDN里面的保护应用程序章节。

然后点击发布按钮即可,发布成功后IE会自动打开发布好的页面,你只需要将发布的地址给需要安装此程序的客户就可以轻松完成程序的部署了。

5. 问题补遗

  • 关于签名过期的问题可以参考园友许海彪的这篇文章:解决ClickOnce签名过期问题
  • 关于ClickOnce信任文件大小的问题,修改注册表HKEY_CURRENT_USER\Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deployment
    做成一项“OnlineAppQuotaInKB”的DWROD值即可。

6. ClickOnce的一个缺点

ClickOnce使用下来我觉得一个最大的缺点就是不让用户选择安装的问题,默认会放在当前用户的 Documents and Settings 文件夹中 Local Settings 目录下的一系列隐藏目录。

设计的初衷是为了为应用程序存储提供一个位置,ClickOnce从用户那里接管了管理应用程序物理安装的任务。 通过对所有应用程序及其不同版本的程序集和数据文件进行独立保存,缓存还有助于隔离应用程序。

这样限制了ClickOnce的部署路径就很大方面限制了对ClickOnce的选择使用,真希望微软能把这个功能点改进掉。

希望你看到这个缺点的时候不要心底一凉,就像我当时发现有这个缺点时候的心情,按需选择就好。 :)

转:ClickOnce部署Winform程序的方方面面的更多相关文章

  1. 【转】ClickOnce部署Winform程序的方方面面

    源地址:http://www.cnblogs.com/parry/archive/2012/10/30/ClickOnce_Winform_Deployment.html

  2. C# ClickOnce部署WinForm程序

    之前做过ClickOnce部署应用程序的项目,今天做一次全面的总结.那么这些都是微软提供方便分布式部署的相关解决方法,这种方法既有弊端,也有优点. 最大的缺点: 远程部署,不能更换安装目录:并且每次安 ...

  3. ClickOnce部署winform

    1.完成winform程序. 示例: 2.项目->属性->发布. 有关ftp在iis中的配置,请参考:IIS中添加ftp站点 :url也需在iis中配置.flashfxp中显示ftp成功 ...

  4. VS2012打包部署Winform程序

    打包前的准备工作: 新建一个打包部署项目,点OK,如果是第一次使用的话,会打开一个网页,按照提示的步骤来做, 点击上面的step2的网址,进入到另一个网页: 填写完右边的信息,点击“download ...

  5. ClickOnce部署疑难杂症:更新时部署与应用程序标识不一致问题。要安装此应用程序,请修改此文件的清单版本或卸载之前存在的应用程序。

    使用ClickOnce部署winform应用程序.无论是安装或者自动更新都极为方便,但有时候一些疑难杂症也令人头疼 1.注意每次部署完成之后 setup.exe无需覆盖,只需要在Application ...

  6. Winform程序部署方式总结一——ClickOnce发布

    针对Winform程序,介绍两种常用打包方式:ClickOnce和Windows Installer 应用程序如下: 一.ClickOnce发布 1.找到需要发布的项目文件,右击,从弹出的快捷菜单中找 ...

  7. 获取使用ClickOnce部署的应用程序的版本号

    引子 在编写使用ClickOnce部署的应用程序时,需要在程序的标题栏.软件变更记录.软件关于等页面读取显示当前的版本号. 之前很傻瓜的做法就是在Resource中维护一个string值,在使用到的地 ...

  8. 以管理员身份启动ClickOnce部署的应用程序

    ClickOnce方式部署应用简单方便,估计很多人都用过,但这种方式存在一定的“缺陷”,即以管理员方式启动应用的问题,虽然出于安全考虑可以理解,但给需要管理员权限才能正常运行的程序带来了一定的麻烦,这 ...

  9. 为通过ClickOnce部署的应用程序进行数字签名

    为通过ClickOnce部署的应用程序进行数字签名 ClickOnce是.NET用于Windows应用程序的一种便捷部署方式.不过由于便捷,导致缺少自定义操作的空间.比如需要对通过ClickOnce部 ...

随机推荐

  1. docker 使用compose安装zookeeper集群

    此基础镜像使用的为zookeeper的官方镜像 docker pull zookeeper 新建文件 docker-compose.yml version: ' services: zookeeper ...

  2. Aviator 表达式求值引擎开源框架

    简介¶ Aviator是一个高性能.轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值.现在已经有很多开源可用的java表达式求值引擎,为什么还需要Avaitor呢? Aviato ...

  3. c#中引用类型作为值参数和引用参数问题

    一.分类 C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型. C#的引用类型包括:数组,用户定义的类.接口.委托,object,字符串. 二.参数传递 对于引用类型, ...

  4. 深入了解Java虚拟机(3)类文件结构

    虚拟机执行子系统 一.类文件结构 1.魔数和class版本 1.magic-魔数:0xCAFEBABE:4字节 2.minor_version:次版本,丶之后的数字:2字节 3.major_versi ...

  5. 什么是SOA

    面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台.操作系统和编 ...

  6. 【转】一次由过量线程引发的OOM排查

    mac的话,还得进行下特殊处理:右键mat显示包内容,进入Contents->MacOS下面,会有一个MemoryAnalyzer的命令. 打开终端,进入此路径找到MemoryAnalyzer, ...

  7. ORACLE数据库数据的备份与恢复

    原创作品,转自请在文字开头显眼位置注明出处:https://www.cnblogs.com/sunshine5683/p/10052949.html 数据备份恢复在数据库管理中至关重要,今天,总结一下 ...

  8. CCScrollView的滑动体验

    最近在研究cocos2dx,由于项目中要用到内容滚动效果(内容超出容器,可以通过滑动屏幕滚动来查看),所以就毫不犹豫的选择了CCScrollView组件.   使用中发现CCScrollView的体验 ...

  9. 自动化构建工具--gulp的初识和使用

    gulp 首先:什么是gulp? gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我 ...

  10. mybatis作用、基本使用、小结

    1. MyBatis 1.1. 作用 MyBatis是持久层框架,它是支持JDBC的!简化了持久层开发! 使用MyBatis时,只需要通过接口指定数据操作的抽象方法,然后配置与之关联的SQL语句,即可 ...