无须下载文件即可检测是否需要更新的脚本
很多人做自动更新程序,发现不是很好,http文件就两个命令,InetGet,InetGetSize,前面一个要下载,后面一个不用下载.大多数人是用InetGet来做的,我今天用InetGetSize做一个.
开源大作,支持的就下载.没钱的就拷代码.高手就飞过,谢谢!;代码名称:无须下载文件即可检测是否需要更新的脚本
;3.2.13.7.1版本下编译通过
;优势:不用到服务器下载任何文件就可以判断程序是否需要更新。
;高手请飞过。。。。。。。
;作者:wangwen916
;email:wangwen916@21cn.com不推荐发邮件,已经专门用来对付垃圾邮件。但是我还是会用OUTLOOK刷下来处理的。
;时间:2009.11.9.23:59
;地点:深圳
;声明:本代码为本人原创,你可以随意复制或者修改而不需要通知本人。建议保留版权信息,文中提到的地址只是起说明描述作用,
;对软件不做明示的或暗示的任何担保,
#include <GUIConstants.au3>
;#NoTrayIcon;不显示图标,后台运行
Local $n0,$i,$n6,$n7,$n8,$size1,$size2,$up,$msg ;变量声明
$n8=10000 ;下载超时时间设置,程序大设置长一点。考虑网速。
;此为控制程序,主程序通过这个程序调用。
;http://down.360safe.com/inst.exe把下面这个地址替换成你的软件地址。这个是360的。文件小供测试,不保证连接一定可以用。
;你的软件安装后需要释放"控制程序"与”update.txt“这两个文件到主程序目录
;服务器单独存放一个”update.txt“供升级程序检测
;*************************************************************************************************************
;*************************************************************************************************************
;”update.txt“写法:每次更新程序时加上日志,那么这个文件会增大。增大就会使文件不一样。 $$$$程序精髓$$$$$
;*************************************************************************************************************
;*************************************************************************************************************
;****************************************************************
;您需要修改文中以下位置才可以运行。
;(您的版本文件地址)
;(您的升级包地址)
; (您的主程序)
;调试信息,正常注释掉
;****************************************************************
;把下面的加到控制程序后
$n0=GuiCreate("控制台", 260, 200,0,0) ;创建控制台
GUISetState()
call("up") ;调检测函数
run("notepad.exe") ;(您的主程序)
Opt('MustDeclareVars', 1) ;匹配模式
Func up() ;自动更新检测函数
$size1=InetGetSize("http://www.abc.com/soft/update.txt") ;服务器文件大小(您的版本文件地址)
If $size1=0 Then ;无法获取服务器文件大小
MsgBox(64, "错误", "程序将退出!无法连接到服务器") ;调试信息,正常注释掉
WinClose("无标题 - 记事本","") ;(您的主程序)
Exit
EndIf
MsgBox(0, "服务器文件大小:"& $size1&"字节","调试信息") ;调试信息,正常注释掉
$size2=FileGetSize("update.txt") ;本机当前目录文件大小
MsgBox(0, "本机文件大小:"& $size2&"字节","调试信息") ;调试信息,正常注释掉
$up=StringCompare($size1,$size2) ;比较升级文件大小
If $up=0 Then ;如果本机文件跟服务器文件不一致
MsgBox(64, "您的软件是最新", "不需要升级") ;不需要更新提示
Else ;否则
call("n3") ;转更新进度函数
EndIf
EndFunc
Func n3() ;更新进度函数
$n6=InetGetSize ( "http://down.360safe.com/inst.exe" ) ;获取文件大小(您的升级包地址)
If $n6=0 Then
MsgBox(64, "无法连接到服务器", "尝试下载离线升级包再安装!")
MsgBox(0, "提示", "地址将自动保存到剪贴板,粘贴到浏览器下载!")
ClipPut ( "http://down.360safe.com/inst.exe" ) ;(您的升级包地址)
WinClose("无标题 - 记事本","") ;(您的主程序)
Exit
EndIf
InetGet("http://down.360safe.com/inst.exe",@DesktopDir&"/update.exe",1,1)
;下载到当前用户桌面(您的升级包地址)
ProgressOn("正在下载升级包", "文件大小"&$n6*0.000001&"MB") ;创建进度条
While @InetGetActive ;是否还在下载
$n7=@InetGetBytesRead/$n6*100
For $i = 10 to 100 step 10
ProgressSet($n7, "已下载"&@InetGetBytesRead*0.000001& "MB") ;进度条设置
Next
sleep(5) ;防止字符太闪烁,超时时间跟这个有关
$n8=$n8-1
if $n8<0 Then
MsgBox(64, "下载超时", "请换时间升级或者手动下载升级包再安装!")
WinClose("无标题 - 记事本","") ;(您的主程序)
Exit ;关闭控制程序
EndIf
Wend
ProgressSet(100, "完成", "完成")
ProgressOff() ;关闭进度条
WinClose("无标题 - 记事本","") ;(您的主程序)
MsgBox(64, "下载完毕!", "您可以在桌面找到升级包,复制到其他电脑升级或安装,点击“确定”将在本机启动升级向导!")
;run(@DesktopDir&"/update.exe") ;运行升级程序,要运行取消注释
Exit ;关闭控制程序
EndFunc
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend
看到15年前的自己,感概良多,年轻的时候就那么的勤奋:face (20): 复制代码乱乱的,建议还是下吧,顺便给我5块钱...呵呵,现在没人抢沙发,自己坐坐! 看看,效果怎么样!支持原创! 有人看有人下,我的努力没有白费啊...实际我已经应用到我的程序中去了......断网等条件已经测试过了,没有发现什么BUG,如有BUG请报告,谢谢! 很 不错
下载了
支持下 楼主强悍
谢谢分梦想 收藏 学习一下,感谢楼主 看看和其他的有什么不同 正在测试 ,,谢谢 感谢楼主,学习了 冒是不错。 很不错支持胃 :face (27): 喜欢楼主的共享精神 虽然现在用不上 支持下收藏备用 很不错支 {:face (370):}