Click Once使用总结

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

时间: 2024-11-05 15:32:18

Click Once使用总结的相关文章

Click Models for Web Search(2) - Parameter Estimation

在Click Model中进行参数预估的方法有两种:最大似然(MLE)和期望最大(EM).至于每个click model使用哪种参数预估的方法取决于此model中的随机变量的特性.如果model中的随机变量都是可以observed,那么无疑使用MLE,而如果model中含有某些hidden variables,则应该使用EM算法. 1. THE MLE ALGORITHM 似然函数为: 则需要预估的参数的在似然函数最大时候的值为: 1)MLE FOR THE RCM AND CTR MODELS

Click Models for Web Search(1) - Basic Click Models

这篇文章主要是介绍一些基本的click model,这些不同的click model对用户与搜索结果页的交互行为进行不同的假设. 为了定义一个model,我们需要描述出observed variables,hidden variables,以及它们之间的关联,以及它们对model parameters的依赖关系.当我们获取了model parameters之后,我们便可以进行CTR 预估,或者计算数据的最大似然估计. 1. RANDOM CLICK MODEL (RCM) 这是最简单的一个mod

zepto的touch模块解决click延迟300ms问题以及点透问题的详解

大家都知道移动端的click事件会延迟300ms触发,这时大家可以使用zepto的touch模块,里面定义了一个tap事件,通过绑定tap事件,可以实现点击立即触发的功能. 那么,它的tap事件是怎么实现的呢?这是我们要解决的第一个问题. 第二个问题,大家都知道zepto的tap事件会有点透的问题,那么,点透如何出现,点透为什么会出现,点透问题如何解决等,这是我们要解决的第二个问题. 我们先来看tap事件是如何实现的? 查看touch.js代码,在最后的代码中有以下代码: ;['swipe',

RobotFramework自动化测试框架-移动手机自动化测试Input Text和Click Button关键字的使用

Input Text和Click Button Input Text 关键字一般用来给输入框进行输入操作,该关键字接收两个参数[ locator | text ]. 示例1:启动安卓手机上一个APP的MainActivity,在打开Activity,进入界面后,分别向两个EditText输入框中输入12,并且点击按钮"计算"来计算出输入的这两个数字的乘积. APP的界面如下,提供了两个输入框,还有一个计算的Button按钮. 在写这个自动化案例前,我们可以使用安卓SDK提供的Ui Au

jQuery里面click、this事件遇到(Django模型里for)相同的id名和class名想获取值

遇到的原型是这样的!下面我把它简化一下; click事件: 在浏览器里面只能获取横线上面的值,和下面的第一个值!! 这是因为id等级比class高,而且js要求id不能重复! 当

移动端WEB开发,click,touch,tap事件浅析

一.click 和 tap 比较 两者都会在点击时触发,但是在手机WEB端,click会有 200~300 ms,所以请用tap代替click作为点击事件. singleTap和doubleTap 分别代表单次点击和双次点击. 二.关于tap的点透处理 在使用zepto框架的tap来移动设备浏览器内的点击事件,来规避click事件的延迟响应时,有可能出现点透的情况,即点击会触发非当前层的点击事件. 处理方式: (1). github上有一个叫做fastclick的库,它也能规避移动设备上clic

从click事件理解DOM事件流

事件流是用来解释页面上的不同元素接受一个事件的顺序,首先要明确两点: 1.一个事件的影响元素可能不止一个(同心圆理论),但目标元素只有一个. 2.如果这些元素都绑定了相同名称的事件函数,我们怎么知道这些函数的运行顺序?于是有了事件流的概念(事件捕捉,事件冒泡) 举个例子: <div id="outer"> <p id="inner">Click me!</p> </div> 为了看起来方便,先无视CSS样式,那么蓝色的

移动端click事件延时

在移动端使用click事件会产生300ms的延迟 问题的产生: 移动端存在双击放大的问题,所以在移动端点击事件发生时,为了判断用户的行为(到底是要双击还是要点击),浏览器通常会等待300ms,如果300ms之内,用户没有再次点击,则判定为点击事件,否则判定为双击缩放. 为什么要解决: 线代web对性能的极致追求,对用户体验的高标准,让着300ms的卡顿变得难以接受 如何解决: 1.user-scalable:no  禁止缩放——没有缩放就不存在双击,也就没有点击延迟 2.指针事件:CSS:-ms

jQuery-append添加元素click无效

很久没有使用jQuery,做项目的时候遇到一个小问题就是网页加载之后的append的元素是可以执行click事件,网页加载完成之后的,再次append的元素不执行click事件,简单的通过ul模拟一下: <ul class="content"> </ul> <span class="test">测试</span> 三种不同的点击方式,append之后的click无效,通过on执行,注意参数: $(function()

Android点击事件(click button)的四种写法

在学习android开发和测试的时候发现不同的人对于click事件的写法是不一样的,上网查了一下,发现有四种写法,于是想比较一下四种方法的不同 第一种方法:匿名内部类 代码: package com.zdx.testdemo1; import javax.security.auth.PrivateCredentialPermission; import android.app.Activity;import android.os.Bundle;import android.view.Menu;i