转载:编写自动升级程序(思路)

冷静地分析了一下

程序说明:

1   web站点一个

     用途:A.提供下载源(dll,exe,图片...等等...所有最新文件)

               B.那个啥...嗯....弄个页面,输出xml格式的数据(用response.write输出)这个xml数据要体现,当前版本号,文件名等信息,就是把DataTable以xml表现出来形如以下。(当然,完全可以用WebService,只是个人认为用xml更专业,更节约)

2   升级程序一个

     用途:A.负责判断是否需升级

               B.下载需要升级的文件

               C.将老文件替换成新文件

3   你要升级的程序,在此不多说。看接下来的细节。

 

很重要的说明:升级程序是一个独立的exe文件,让它跟主程序打包在一起,安装后在同一个目录下边。前面三个程序相辅相成,才能完成自动升级更新。看细节吧。

 

接下来是细节了,很冷静的细节,你运气好,碰上我今天刚好心情差,给你说详细。(1,2,3....表示步骤)

1步:往web站点中传文件,记得接收文件的时候改一下后缀名(统一改为.rar或.txt)这样,web服务器(IIS)不会因为安全因素将特别文件(.dll,.exe等)拒之门外。同时,往数据表中记录以下属性(文件真实名[如:ABC.exe]、文件下载地址、相对根路径的路径、文件版本号[有版本号的(如:dll,exe)取版本号,没版本号的(如:jpg)取MD5值])

特别说明:版本号、你可以百度“C#获取文件版本号”获取相关代码。

 

很尴尬  ==! 这里有一步要说明一下:主程序启动时,启动升级程序(Process可做到)有问题百度“C#启动其它应用程序”

 

2步:升级程序请求生成xml的页面(实际上就是一个aspx,只是输出的内容是 xml 形式的,用response.write输出),或者你直接用webservice提供一个方法返回第一步中提及的数据表(DataTable).

 

3步:升级程序将xml内容转译成datatable、如果用webservice这一步就省了。

 

4步:升级程序遍历第三步获取的datatable、根据"相对根路径的路径"获取本地老文件的信息,如果本地有文件,就获取版本号,或者MD5值,如果本地没有文件、或版本号不等、或者MD5值不等则表示这个文件得更新(把这条信息(DataRow)存入队列(数组))这一步,知道了有哪些文件需要下载。

 

5步:升级程序根据第 4步 中得到的队列逐一下载文件到 (Temp目录) 

 

6步:升级程序关闭主程序进程(Process类可做到),有问题可以 百度“C#结束其它进程”,这样要杀要剐老文件就随你了,因为它们将不再被其它进程所占有。

 

7步:升级程序将第   5步 中下载的文件根据 "相对根路径的路径"  字段逐一移到对应目录,将老文件替换。

 

8步:工作完成,升级程序启动主程序(Process类可以做到) 有问题可以百度“C#打开其它exe”

 

9步:没了,没啥好说的了。

 

下载可以用:httprequest,httpresponse这两个类,具体见msdn,用它们可做断点续传,实时进度条,多线程下载。你还可以用WebClient它不怎么样,一次下一个文件,无法实现断点续传,无法实时获取进度,最重要的一点,用它显得不专业。

 

思路在这了,绝对错不了。

我叫绿豆蛙,别人喜欢叫我三爷,我很多年没碰C/S了,幻想有一天还能做个C/S的项目。哥哥我今天心情不好,因为我快结婚了,压力特别大。

补充回答: 不好意思啊,我这个是自己写代码实现的意思,就是自己开发个升级程序了,不是那什么微软可笑的一键部署技术(我曾用试过,后来觉得让我很尴尬,就什么发布到一站点然后访问点一下按钮就安装了,最后能访问站点时自动更新,不能访问时执行本地,你就连它装在客户端哪个位置都不知道,很尴尬的。微软一键部署技术是浮云,反正我是不信它,你信它还是信我呢?你开始肯定是信它了,哈哈。)。
posted @ 2013-03-05 16:15  慧由心生  阅读(440)  评论(0编辑  收藏  举报