文章目录[隐藏]

德斯资源网2月8日消息,目前我的任务是用C#开发一个桌面软件,安装在分散在全国各地的数百台PC上。而且软件的改版和升级在未来很长一段时间内会比较频繁,所以采用了微软的ClickOnce部署技术。这是一项易于快速使用的技术,但在你决定将其用于真正的商业项目之前,你应该了解一些未来会困扰你的问题,例如,然后决定你是否应该采用它。或许从头开始写一个自动推广框架更适合你的情况。

 

1、无法有效阻止合法下载。

使用ClickOnce部署,可以在Web服务器上发布软件的更新版本。当用户从开始菜单启动软件时,ClickOnce会自动转到指定的URL检测是否有新版本,并从该地址下载最新版本。问题是访问这个URL的过程是ClickOnce的外部函数。如果用户之间有任何交互,就不可能实现无效用户认证。如果ClickOnce要正常更新,就要保证这个网址可以随意访问。任何人只要在阅读器中输出这个URL就可以下载这个程序。

我还没有找到很好的处理方法,只能尝试增强软件本身的验证机制,即使有人合法下载安装了你的程序,让他无法使用。

 

2、挫折感。NET框架设备

ClickOnce可以自动验证客户端PC是否可以安装所需的。NET Framework及其版本,并能自动启动下载程序从微软网站获取最新的设备文件。这是一个非常有用的功能。在正常情况下,很难说服用户安装。NET Framework在微软网站上自己先上,大部分用户甚至都不想知道什么是框架(很难跟他们解释清楚为什么安装一个小软件要先安装一个有几百兆大小的叫Framework的鬼东西)。但是在实际测试中,我们发现了一个问题:用户的PC只能通过公司外的代理接入互联网。由于某种原因,自动下载程序访问微软网站的速度慢得令人难以忍受。200M框架和60个文件以及自动设备需要一个多小时,远不及间接手动下载设备包的速度。

好在ClickOnce提供了一个选项,可以将框架和程序同时发布到自己的服务器上——不过由于Visual Studio 2008的一个小Bug,这个选项并不好用。您需要先参考文档[Visual Studio 2008 Service Pack 1(SP1)real ease Note]的2.3.1.1部分,手动修复这个小疑问——现在您可以将框架发布到同一个服务器上进行下载,只要您确定自己服务器的速度。

目前ClickOnce的下载功能并不是很智能,无法在断点处恢复:我这里遇到的一种情况是服务器端的一些代理软件吞吐量不够,下载过程中失败的概率较高;另外,如果用户分散在多个地区,从哪里下载也不一定更快。比如有的人访问微软官网比较快,但是ClickOnce没有办法静态切换框架的下载地址。问题的关键在于,这种框架自动下载装置的进程不能被敏感地干扰,它的优势只有在最理想的网络环境下才能真正发挥出来。

 

3.的另一个烦恼。NET框架设备

处理完上述问题后,我曾经部署了软件和。NET Framework安装在Web服务器上,一切似乎都很顺利,只需点击一下鼠标。然而,随着设备软件的用户越来越多,自动设备过程中出现莫名其妙的错误。

赞的电话越来越多。怀疑的原因是有些PC安装了不同版本的Framework3.5SP1,但是和我发布的版本不太一样,比如没有语音包,ClickOnce也没有办法自动掩盖设备。

事实上,框架设备的版本冲突是很少见的。常见的解决方法是从控制面板中删除现有版本,重新启动计算机,然后重新安装设备。如果仍然不起作用,您可以在。微软提供的. NET框架清理工具。但是这种处理对于最终用户来说是无法忍受的。他们需要的是真正的ClickOnce:一键帮我解答所有问题。

早知道后悔过去后悔现在,就不该给用户太高的期望。我应该从一开始就诚实地教育他们手动设备框架。

 

4.设备目录和卸载

软件投入使用后,用户纷纷称赞,每次版本升级,都要过很久才能看到程序的启动画面。经过调查发现,ClickOnce部署的程序会安装在随机生成的目录下,文件夹为C:\ Documents and Settings \ User Name \ Local Settings \ Apps \ 2.0。升级版本时,不会间接删除旧版本,而是随机生成另一个目录,原封不动地复制已有的用户数据文件。如果需要,可以在【控制面板-添加设备程序】中恢复到旧版本继续使用。卸载程序时,该目录将自动清空。

问题是我的软件启动后,生成并保存了上百个XML格式的模板文件和数据文件,几个小文件的磁盘拷贝操作非常耗时。PC功能的开发和测试都不是很清晰,又恰好用户用的是比较老的笔记本电脑,所以版本提升的进度就变得非常清晰和缓慢。

为了解决这个问题,可以将数据文件存放在一个独立的文件夹中,但是在卸载的时候,由于这些数据文件不属于ClickOnce的设备目录,所以无法自动删除。如果由ClickOnce部署的程序在卸载时可以调用一些自定义的处置方法就好了。

 

5.有新的问题。

有一天,一个用户把笔记本电脑搬离了一个偏僻的地方,那里没有宽带,只能用一只56K的小猫上网。当他打开软件并想执行任务时,ClickOnce会提醒他该软件有更新版本。是要安装还是暂时跳过?因为不确定56K小猫的下载速度,他选择了跳过:反正老版本的软件可以继续用,先完成任务很重要。几天后,用户回到宽带社,以为现在可以升级到版本了,但再次打开软件时,并没有新版本的提示信息。

虽然我不太明白,但这就是ClickOnce的任务:如果你选择跳过某个版本,那么你将永远跳过它,除非有更新的版本发布,否则ClickOnce会提示你再次前进。如果我是你,我会给用户两个选择:跳过一段时间,不要再提示我这个版本的更新。可惜微软的技术人员好像没有我考虑的周到。

尽管MSDN提供了完美的编程示例,但现实世界往往与这些示例相去甚远。我将在另一篇文章之外讨论我在通过API实现ClickOnce update时会遇到的各种问题。

 

6、关于证书的两个问题

第一,对于检测的证书在签发时的有效期限有疑问,会导致一年后无法连续续展。所以我干脆把证书注销了才放出来。用户安装软件时会有通知,这似乎是毫无疑问的。第二,如果ClickOnce是从https的地址更新的,那么服务器证书肯定是无效的。如果读者访问此网站时会弹出证书无效的通知,则ClickOnce的更新将会失败。前几天碰到一台客户端PC,没有安装Windows的根证书(IT部门很聪明,在安装系统的时候把他认为不必要的组件都省略了),无法验证服务器端证书的无效性,导致无法更新ClickOnce。

 

7、虽然有很多设置选项,但缺乏对应实际需要的灵敏度。

ClickOnce有许多主要设置选项。所以当我选择用ClickOnce进行部署的时候,我并没有认为这些选项不够敏感,不能满足实际需求,尤其是遇到执着于可操作性的用户。
用户最初提出的详细优先级实际上是:
1.启动要更新的行;
2.当网速过慢,更新过程耗时过多时,可以在途中随时取消,用旧版本启动;
3.当用户任务结束,软件关闭,重新执行刚刚取消的更新。因为这个时候没有紧急任务,可以慢慢下载。

 

单纯使用ClickOnce的选项设置无法满足这一需求,彻底抛弃ClickOnce也为时已晚。一开始我们要在选项设置里取消自动更新,完全靠编码调用API。虽然过程中有各种小问题,但好在一开始基本完成了用户的需求。

但这也是微软产品的特点:简单易用,看似多功能...不敏感。

 

本文中描述的问题都是基于Visual Studio 2008 SP1和。NET框架3.5 SP1。

也许在VisualStudio2010的最新版本中,有些问题比如改进的丢失还没有讨论,而有些问题比如我的曲解,欢迎指正!

总结:

今天就分享到这里吧,下期给大家分享更多软件小知识,德斯资源网每天都会更新一些日常软件小知识,包括有微信,酒友购,支付宝,惠易购,青蛙易购,诚智通,淘米购,叮咚盲盒,伶信,QQ,新易选,红包辅助,易民购,苹果微信多开,淘盟铺,微信分身,安卓微信多开,梦幻盲盒,享乐好物,淘客购,旗语,优品铺,香蕉赶集,乐享购,亲聊,探聊,创信,赞聊等社交软件下载,软件自带功能有秒抢,避雷,埋雷软件,扫尾,单透软件等一些红包强项外挂功能软件免费下载使用。