做了一个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是能够满足需求的,如果有更多特殊的要求,就只能使用其他成熟的更新组件或者干脆自己设计一个好了。