做了一个CS结构软件,有十几个用户使用的客户端,因为刚开始试用期间,要不断根据用户使用情况修正问题和添加新功能,所以频繁更新是不可避免的,暂时没有深入去研究软件更新,暂时采取的方式是用户通过FTP自行更新,这种方式很麻烦,最烦的是,常常有很多用户忘记更新,而我预期的是一旦更新,每个客户端都能自行更新到最新版本。

后面想到使用微软的ClickOnce,每次我将新版本软件发布到服务器上,然后用户再打开软件的时候,ClickOnce会自行判断软件是否需要更新,然后通过点击就可以实现更新,这样无疑是非常好的。

不过经过我的实践使用和搜索其他使用ClickOnce的人的经验,虽然发现ClickOnce其实有很多问题的,不过一番研究下来,ClickOnce其实是能够满足我的简单需求的,那么后面就决定使用ClickOnce了。

下面我将ClickOnce的用法以及遇到的一些疑点和解决方案写出来,内容简单,并没有太过深入,希望会对其他有类似需求的朋友有一点帮助。

ClickOnce可以发布WinForm或者WPF等客户端程序,一般是发布到公共的服务器上,部署安装直接给用户发一个html地址,他们点击这个地址就可以安装了。

需要做的准备工作有:

提前在服务器上开一个IIS网站站点,端口号可以使用空闲的,比如8001等(要设置防火墙允许,不然会被挡住),设置好程序池,对应文件夹访问权限,可以用一个自制的简单html文件测试一下该站点是否OK。

然后设置一个到该站点对应文件夹的FTP服务,我使用的FTP服务器软件是Xlight,非常好用的软件,极力推荐。FTP服务是为了方便以后你往服务器上上传新的客户端部署文件用的。

接下来就是要在VS当中设定你要部署的项目属性了。

打开项目的属性页,选择发布选项卡,如下图:

发布位置有两个,第一个是【发布文件夹位置】,意思就是你的软件程序会被压缩打包放到的地方,后续安装就要用到这些文件,可以直接点击后面的按钮,选择FTP或者本地,因为Click Once的FTP做的太简陋了,发布上传速度十分感人,而且我在实际使用当中有时候会出现莫名奇妙发布到其他地方的怪异现象,所以推荐选择本地的一个文件夹,后续再自行上传到服务器地址。

第二个是【安装URL】,这个地址就是后面实际用户从什么地方来安装你的软件,也就是你上面发布的那些程序文件后面实际存放的位置,一般用户是通过服务器来安装你的软件的,所以一般这里写的是服务器地址,我这里地址端口后面的目录是因为我在这个地址上要发布多个软件,所以用不同的目录访问区别一下。

安装模式有两种,一个就是只能联机使用(每次用都要连接到你的安装服务器),一种就是可以脱机使用(一时半伙连接不上安装服务器也可以,只是不能更新罢了),一般选择第二种。

下面发布的版本号和你在程序集里设定的版本号不一样的,这个版本号只是为了更新的目的。

每次客户端检测到安装服务器上的版本号比当前客户端的号大,就会提示更新(和实际你的程序有没有变动没有关系),手动更改还是自动递增结合自己的情况来选择。

 

点击应用程序文件会出现下面的窗口

这里就是你的项目中将要发布给用户的文件,基本上exe和dll都会包含进去,但是有些资源文件,比如图片,其他文档等,如果在这个列表当中没有看到,就要会到项目资源管理器当中,右键设定他们的输出属性为内容,并且复制到目录中,这样就会在应用程序文件列表中看到它们了,对应的文件夹层次也会自动生成的(列表中看不到)。

接下来使用系统必备组件,这个很好理解,不详细说了。

接下来是更新设定

上面的很清楚,不说了,下面指定最低版本的意思就是允许运行的最低版本(低于这个版本,不更新不让你用,有些用户在有更新提示的时候会选择不更新)

更新位置如果为空,默认就是安装服务器,如果你换其他服务器来更新的话,就重新设定一下位置。

接下来是选项,有四个选项卡

说明部分下面的支持url就是提供支持服务的网站,错误url就是程序出错之后转到的网址,一般不用填写

部署网页就是用户头一次安装的时候需要打开的网站,名字自己拟定,发布的时候会自动生成,访问的时候通过192.168.16.254:8001/PMS/publish.html

 

清单,有用的是创建桌面快捷方式,快捷方式的图标就是程序的图标

如果需要关联的文件的话,在这里设定一下。

 

这些都设定好了之后就可以直接发布了,发布后的文件会在发布设定的本地文件夹中(如果你设定了发布文件夹的话)

然后将这些文件用FTP上传到你设定的安装服务器的地址上,之后就可以通过192.168.16.254:8001/PMS/publish.html的地址进行访问安装了。

最后还要说的就是签名

没有正式的签名证书就暂时不签名了,签名的作用都知道,没有签名在安装的时候会出现风险警告提示,不过是自己知道可以信任,这时候一路确认就行了。

用户第一次安装完后,当有新的更新传送到服务器的上的时候,用户在打开安装好的客户端的时候就会自动检测版本,一旦发现需要更新,那么就会自动提示下面的信息。

一路确认即可。

以上就是Click Once的入门使用,希望能有帮助。

接下来再说说它的一些问题。

从MSDN上看,ClickOnce每次更新都是下载更改过的部分,然后从重新安装,而且每个版本之间是独立,不会互相影响,同时它对权限控制的比较严格。

我查看过来,安装的位置其实是在用户文件夹下隐藏的C:\Users\用户名\AppData\Local\Apps,配置和其他程序一样都默认放在Local里,有些人觉得这个很不自由,但是除非你的程序对系统权限有很多特殊的要求的话,还是按照微软的设定走比较合理,印象中Chrome就是这么设定的。

我认为,就一般需求来说,ClickOnce是能够满足需求的,如果有更多特殊的要求,就只能使用其他成熟的更新组件或者干脆自己设计一个好了。

Click Once使用总结的更多相关文章

  1. click事件的累加绑定,绑定一次点击事件,执行多次

    最近做项目为一个添加按钮绑定点击事件,很简单的一个事情,于是我按照通常做法找到元素,使用jquery的on()方法为元素绑定了点击事件,点击同时发送请求.完成后看效果,第一次点击没有问题.再一次点击后 ...

  2. 移动开发那些坑之——safari mobile click事件的冒泡bug

    今天在iphone6 plus的safari上测试这么一段代码: <script> $(document).on('click','.callApp', function() { aler ...

  3. 苹果手机不支持click文字 需要添加 cursor:pointer 才能 识别可以点击

    给一个div 绑定一个 click事件,  苹果手机会识别不了,必须添加一个 cursor:pointer 才能 识别可以点击.安卓正常识别.

  4. AlloyTouch Button插件-不再愁click延迟和点击态

    移动端不能使用click,因为click会有300ms.所有有了fastclick这样的解决方案.然后fastclick并没有解决点击态(用户点击的瞬间要有及时的外观变化反馈)的问题.hover会有不 ...

  5. js动态绑定click事件时function传参问题

    今天碰到了这样一个问题,我在javascript中动态创建了一个button, 然后我想给改button添加click事件,绑定的function想要传入一个变量参数, 一开始我想直接通过函数传参传进 ...

  6. 阿里技术协会好文推荐:Android绘制流程http://click.aliyun.com/m/8719/

    一.前言 1.1.C++界面库 MFC.WTL.DuiLib.QT.Skia.OpenGL.Android里面的画图分为2D和3D两种: 2D是由Skia 来实现的,3D部分是由OpenGL实现的. ...

  7. 移动端web开发,click touch tap区别

    转自: http://blog.csdn.net/sly94/article/details/51701188 移动端用tap时会有穿透问题 一:click与tap比较 click与tap都会触发点击 ...

  8. v-for遍历出的元素上添加click事件,获取对应元素上的属性id值

    <span v-for="(n,nav) in floorList" data-id="{{nav.itemId}}" v-on:click=" ...

  9. jquery 自定义click事件执行多次

    用jquery绑定一个按钮click事件后,第一次点击后一切正常,第二次点击竟然执行两次,以后越来越多, 后来查看文档发现 jquery click 不是替换原有的function 而是接着添加,所以 ...

  10. 关于a标签自身的click事件所带来的一些影响

    众所周知a标签自身带有点击事件<a href="#"></a>从它本身的特性来讲并没有什么不好的影响,但是如果你在a标签里又加入onclick事件则< ...

随机推荐

  1. UITableView控件didSelectRow和didDeselectRow方法注意事项

    UITableView控件didSelectRow和didDeselectRow方法注意事项 1. 因Xcode强大的自动补全功能,在使用UITableView如下两个方法时,务必特别小心,避免出错: ...

  2. 在CentOS 7上安装Docker环境

    官网文档:https://docs.docker.com/engine/installation/linux/centos/ ,本文大部分是照搬官方文档写的,如果你英文还不错,那么就直接移步官方文档吧 ...

  3. 统计 SQL Server中的 Job 情况

    SELECT J.name 作业名称, P.step_id'步骤编号',P.step_name'步骤名称',p.SubSystem '步骤类型',P.command'执行命令', CASE freq_ ...

  4. Knowledge Point 20180305 十进制转换成二进制浮点数

    如何将十进制的浮点数 转换二进制的浮点数,分为两部分: 1. 先将整数部分转换为二进制, 2. 将小数部分转换为二进制, 然后将整数部分与小数部分相加. 以 20.5 转换为例,20转换后变为1010 ...

  5. MyBatis之Mapper XML 文件详解(四)-JDBC 类型和嵌套查询

    支持的 JDBC 类型为了未来的参考,MyBatis 通过包含的 jdbcType 枚举型,支持下面的 JDBC 类型. BITFLOATCHARTIMESTAMPOTHERUNDEFINEDTINY ...

  6. DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描

    DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许进制转载  吐槽之后应该有所改了,该方式可以作为一种过渡方式 ...

  7. #leetcode刷题之路35-搜索插入位置

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置.你可以假设数组中无重复元素. 示例 1:输入: [1,3,5,6], 5输出: ...

  8. Zabbix——设置阈值和报警

    前提条件: Zabbix 服务器可以正常监控其他设备 Zbbix 已经配置完成了邮件报警 Zabbix server版本为4.0 配置ICMP监测,1分钟如果ping不通,将会发送邮件 找到Templ ...

  9. Action与Func 用法

    //vs2017 + framework4.6.2 //zip    https://github.com/chxl800/ActionFuncDemo //源文件git   https://gith ...

  10. Maven DebugConfiguration配置运行内存

    -Xms256M -Xmx512M -XX:PermSize=256m -XX:MaxPermSize=512m