找回密码
 加入
搜索
查看: 2660|回复: 8

想自动更新一个程序.请问如何才能做到不假死

[复制链接]
发表于 2008-9-18 12:30:55 | 显示全部楼层 |阅读模式
我是采用文件大小对比来确定是否有更新的.代码如下
;======================开始 "更新" 函数======================
Func SELFUPDATE()
        $BD = "D:\PROGRAM FILES\TEST\YMTOOL.EXE"
        $TEMP = "D:\PROGRAM FILES\TEST\YMTOOL.TMP"
        $FWQ = "HTTP://L4EVER.CN/API/UPDATE/YMTOOL.EXE"
        $NAME = "XXXXXXXXX"
        TrayTip("<" & $NAME & ">", "请稍等,正在检查更新...", 2, 1)
        $DOWNLOAD = $FWQ
        $SIZE = InetGetSize($FWQ)
        If @error Then
                TrayTip("<" & $NAME & ">", "与更新服务器连接错误!检查更新失败!", 3, 3)
        Else

                If FileGetSize($BD) <> InetGetSize($FWQ) Then
                        MsgBox(64, "提示", "<" & $NAME & ">有更新" & @CRLF & "开始自动更新!", 10)
                        DirCreate("D:\PROGRAM FILES\YMNETWORK\TEMP\") ;创建本地文件夹,以便保存下载的文件
                        InetGet($DOWNLOAD, $TEMP, 1, 1)
                        While @InetGetActive
                                $SIZE = InetGetSize($DOWNLOAD)
                                $PER = @InetGetBytesRead / $SIZE * 100
                                $RES = StringLeft($PER, 4) ;计算百分值
                                $DOWNED = @InetGetBytesRead / 1024 / 1024
                                $DOWNRES = StringLeft($DOWNED, 3)
                                $DOWNNEED = $SIZE / 1024 / 1024
                                $DOWNALL = StringLeft($DOWNNEED, 3)
                                ToolTip("总大小/已下载:" & $DOWNALL & "MB/" & $DOWNRES & "MB", @DesktopHeight / 2, 0, "[" & $RES & "%已完成] - 正在下载" & $NAME, 1)
                                Sleep(1000)
                        WEnd
                        TrayTip("<" & $NAME & ">", "请等待程序完成最后的更新!", 5, 1)
                        MsgBox(64, "恭喜您", "<" & $NAME & ">下载成功!" & @CRLF & "请稍等片刻,程序会自动重启!" & @CRLF & "--------------------------------" & @CRLF & "作者:XXXXXXX" & @CRLF & "EMAIL:XXXXXXXX", "5")
                        Run(@ComSpec & " /C " & 'PING 127.0.0.1 -n 3 && DEL /Q /S "D:\PROGRAM FILES\TEST\YMTOOL.EXE" && DEL /Q /S "D:\PROGRAM FILES\TEST\TEST.EXE" && REN "D:\PROGRAM FILES\TEST\YMTOOL.TMP" YMTOOL.EXE && "D:\PROGRAM FILES\TEST\YMTOOL.EXE"', "", @SW_HIDE)
                        Exit
                Else
                        TrayTip("<" & $NAME & ">", "程序已经是最新版本...", 2, 1)
                EndIf
        EndIf
EndFunc   ;==>SELFUPDATE
;======================结束 "更新" 函数======================


可是InetGetSize的时候如果网速很慢,程序就会假死.
请问该如何解决呢?或者有更好的方法能推荐一下?

[ 本帖最后由 l4ever 于 2008-9-21 15:25 编辑 ]
发表于 2008-9-18 22:02:18 | 显示全部楼层
申请个1G光纤接入
 楼主| 发表于 2008-9-18 22:56:07 | 显示全部楼层
原帖由 pcbar 于 2008-9-18 22:02 发表
申请个1G光纤接入

我的意思是能不能对网络先做个判断?比如PING,是可以设置超时的.
当超时之后就不检查更新了.这样行不行呢?
发表于 2008-9-18 23:22:59 | 显示全部楼层
InetGetSize函数是个废品,可用性几乎为零,楼主还是换个思路吧,比如说在服务器上放个txt文本,里面写上最新的版本号。
 楼主| 发表于 2008-9-19 04:02:38 | 显示全部楼层
原帖由 zcbenz 于 2008-9-18 23:22 发表
InetGetSize函数是个废品,可用性几乎为零,楼主还是换个思路吧,比如说在服务器上放个txt文本,里面写上最新的版本号。

那也的inetget.如果网速慢还是会假死掉..
发表于 2008-9-20 12:55:22 | 显示全部楼层
用TCPConnect 直接和服务器联系,这是最正统的方法。
发表于 2011-11-17 18:18:12 | 显示全部楼层
TCPConnect
发表于 2011-12-1 21:02:41 | 显示全部楼层
哈哈,支持
发表于 2012-2-29 18:18:49 | 显示全部楼层
TCPConnect为何物?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-30 19:36 , Processed in 0.090828 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表