wangwen916 发表于 2009-11-10 00:37:38

无须下载文件即可检测是否需要更新的脚本

很多人做自动更新程序,发现不是很好,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

wangwen916 发表于 2024-4-7 21:08:15

看到15年前的自己,感概良多,年轻的时候就那么的勤奋:face (20):

wangwen916 发表于 2009-11-10 00:40:52

复制代码乱乱的,建议还是下吧,顺便给我5块钱...呵呵,现在没人抢沙发,自己坐坐!

卫和谐 发表于 2009-11-10 10:48:23

看看,效果怎么样!支持原创!

wangwen916 发表于 2009-11-10 22:48:32

有人看有人下,我的努力没有白费啊...实际我已经应用到我的程序中去了......断网等条件已经测试过了,没有发现什么BUG,如有BUG请报告,谢谢!

hs119 发表于 2009-11-30 23:38:56

很 不错

下载了
支持下

xlcwxl 发表于 2009-12-7 13:44:53

楼主强悍
谢谢分梦想

imnebula 发表于 2010-1-4 05:21:25

收藏 学习一下,感谢楼主

hs119 发表于 2010-1-4 23:30:14

看看和其他的有什么不同

hs119 发表于 2010-1-5 00:24:43

正在测试 ,,谢谢

flschi 发表于 2010-4-9 13:51:00

感谢楼主,学习了

adasir 发表于 2010-5-8 22:34:13

冒是不错。

adasir 发表于 2010-5-8 22:38:38

很不错支持胃

qq1244521 发表于 2010-5-10 16:38:20

:face (27): 喜欢楼主的共享精神 虽然现在用不上 支持下收藏备用

spaykimo 发表于 2010-5-26 01:10:59

很不错支

songtao 发表于 2010-7-23 16:44:47

{:face (370):}
页: [1] 2 3 4
查看完整版本: 无须下载文件即可检测是否需要更新的脚本