简单的自动更新程序简单的自动更新程序
很多软件都有一个自动升级的程序。
每次启动软件前,先启动自动升级程序来检查是否需要更新。 如果需要更新,那么就下载更新文件替换原先的文件。
最近也有类似这样的需求,要求大概是:
,(要更新的只有一个文件,这个文件一般不会很大。
,(更新过程,最好不要留下什么明显的痕迹。
,(更新程序,不需要有界面。
根据这个要求,一个通宵下去,
做了一个更新类,网络通信部分用的是Wininet(用套接字太麻烦了) 这个类的使用demo如下:
上图是对比我在如鹏网发的刷帖机程序,如果不一致就下载到内存中,然...
简单的自动更新程序
很多软件都有一个自动升级的程序。
每次启动软件前,先启动自动升级程序来检查是否需要更新。 如果需要更新,那么就下载更新文件替换原先的文件。
最近也有类似这样的需求,要求大概是:
,(要更新的只有一个文件,这个文件一般不会很大。
,(更新过程,最好不要留下什么明显的痕迹。
,(更新程序,不需要有界面。
根据这个要求,一个通宵下去,
做了一个更新类,网络通信部分用的是Wininet(用套接字太麻烦了) 这个类的使用demo如下:
上图是对比我在如鹏网发的刷帖机程序,如果不一致就下载到内存中,然后写入磁盘文件。
(对比的结果如果是本地文件不存在的话,也可以下载到内存,然后写入)
可执行:
Update.rar (45.47 KB)
源代码:
自动更新(根据日期).rar (23.52 KB)
实现更新的步骤和思路如下:
,(本地文件与服务器上的文件进行对比。不同的话,才下载。 对比的方式有很多,可以在服务器上放一个更新文件列
,用,,,值来判断是否相同。
这种更新方式以前用过,有点麻烦,每次在服务器上更新文件,总要计算一次,,,,
然后一起写入更新文件列表来给客户端判断是否需要更新。
现在,新想出一个办法,不用,,,来判断文件是否相同,而用文件的最后修改时间。
这个做起来会比较简单,并且更新也比较方便。
但是,客户机和服务器的时间肯定是不一样的,如何判断是否需要更新呢, 我的做法是:先查询服务器上的指定文件的最后修改时间,
然后和客户机上的指定文件的最后修改时间进行对比,
如果,时间不一致,就说明,需要更新了。
更新完毕后,把客户机上的文件的最后修改时间设置成服务器上的文件的最后修改时间
这样做,就使得每次更新后,客户机和服务器上的文件的时间同步了。 如果服务器上的文件进行了改动,那么下次对比时,一定会和客户机上的文件时间不一样
通过这个手段来判断是否需要更新。
有了对比的思路后,就是具体的实现了。
用Wininet去查询服务器上的文件的最后修改时间,得到的是格林尼治时间的字符串。
我没有找到现成的转换函数,
就自己写了一个函数把格林尼治时间字符串转换成了SYSTEMTIME时间结构。 (当然格林尼治时间是没有毫秒这个域的,SYSTEMTIME对应的毫秒域约定设置为,)
再把SYSTEMTIME时间结构转换成FILETIME(文件时间结构)
为什么要进行这么多步时间结构的转换,因为读取本地文件的最后修改时间, 是以FILETIME(文件时间结构)返回的。所以,获取服务器文件的时间也要转换为这个结构
才能够进行对比。
其实,这个对比更新的思路和浏览器拿缓存文件与网站进行对比、判断cookie是否过期
是差不多的。
2.下载。
因为更新的过程要求尽量隐蔽些,所以,不能一边下载一边写入文件。 因为这样做,万一下载写入到一半,死机了,或是断网了, 会造成用户不能使用这个文件,而被察觉。
由于要更新的文件也不大,
我的采取做法是,先下载到缓冲区(内存中),
等待下载完毕后,再一次性写入。
3.写入文件。
这个就是把下载缓冲区的
写入文件了。
写入完成后,设置文件的最后修改时间与服务器上的文件最后修改时间一致。
本文档为【简单的自动更新程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。