找回密码
 加入
搜索
查看: 6115|回复: 14

[系统综合] 批量下载的问题?[已解决]

  [复制链接]
发表于 2010-4-22 16:09:25 | 显示全部楼层 |阅读模式
本帖最后由 newuser 于 2010-4-23 09:50 编辑

关闭吧!
因我自己有个网站,所以我的批量下载容易些,以下是代码,是结合帮助写的,虽然成功了,但测试中也发现了一个怪问题,不得其解?请大家多帮助.
问题:多次成功测试该代码后,出现"将指定文件内容读取到数组时发生错误:" ,我想是Not _FileReadToArray(@ScriptDir & "\LocalPatchsList.txt",$PatchsFile) 出了问题,可是为什么呢?当我重新启动计算机后,再测试该代码,又正常了,多次测试后,问题又回来了?
;第2步      客户端操作
;从服务器端下载存储补丁文件名称的文本文件
InetGet("http://10.64.240.23:801/patchs/PatchsList.txt","LocalPatchsList.txt",1,1) 
;第1个1是不从IE缓存下载而是强制从远程服务器下载
;第2个1是InetGet()函数立即返回并实现后台下载,因为如果改为0下载的文件又过大,那么等待的时间会很长让人受不了
;批量执行补丁文件

;根据文本中的补丁文件名称实现 补丁文件批量下载 下载
#include <file.au3>
Local  $PatchsFile ;定义了一个用于接收每个补丁文件名称的数组 
If Not _FileReadToArray(@ScriptDir & "\LocalPatchsList.txt",$PatchsFile) Then ;把从服务器下载的存储补丁文件名称文件内容写到数组
        MsgBox(4096,"发现错误","将指定文件内容读取到数组时发生错误:" & @error)
EndIf
MsgBox(0,"请稍等,文件正在下载中...","听段音乐休息一下吧,呵呵!")
For $i=1 To $PatchsFile[0]
        MsgBox(0,"第" & $i & "行的补丁文件名称是:  ",$PatchsFile[$i])
        Local $TempDown=InetGet("http://10.64.240.23:801/patchs/" & $PatchsFile[$i],$PatchsFile[$i],1,1)
        ;定义变量$TempDown接受InetGet()函数返回的句柄
        Do
                Sleep(250)
        Until InetGetInfo($TempDown,2) ; 检查下载是否完成.
        InetClose($TempDown)
        FileDelete(@ScriptDir & "\LocalPatchsList.txt")
Next

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

 楼主| 发表于 2010-4-22 16:26:49 | 显示全部楼层
回复 1# newuser

等待中,呵呵!
 楼主| 发表于 2010-4-22 17:00:06 | 显示全部楼层
回复 2# newuser
着急,不想灌水!
以下代码遇到同样问题???
;第2步      客户端操作---B:根据下载的文件实现批量下载
#include <File.au3>
Local  $PatchsFile ;定义了一个用于接收每个补丁文件名称的数组 
If Not _FileReadToArray(@ScriptDir & "\LocalPatchsList.txt",$PatchsFile) Then ;把从服务器下载的存储补丁文件名称文件内容写到数组
        MsgBox(4096,"发现错误","将指定文件内容读取到数组时发生错误:" & @error)
EndIf
DirCreate(@ScriptDir & "\Update") ;建立一个目录用于存储下载的补丁文件
;for语句开始批量下载
For $i=1 To $PatchsFile[0]
        MsgBox(0,"第" & $i & "行的补丁文件名称是:  ",$PatchsFile[$i])
        Local $TempDown=InetGet("http://10.64.240.23:801/patchs/" & $PatchsFile[$i],@ScriptDir & "\Update" & $PatchsFile[$i],1,1)
        ;定义变量$TempDown接受InetGet()函数返回的句柄
        Do
                Sleep(250)
                MsgBox(0,"请稍等,文件正在下载中...","听段音乐休息一下吧,呵呵!")
        Until InetGetInfo($TempDown,2) ; 检查下载是否完成.没有Do...Until循环,就无法实现批量下载,即仅下载1个文件
        InetClose($TempDown) ;关闭句柄,释放资源
        FileDelete(@ScriptDir & "\LocalPatchsList.txt")
Next

;第2步      客户端操作---C:批量打补丁
$FileList = _FileListToArray(@ScriptDir & "\Update", "*.exe", 1)
For $i = 3 To 1 Step -1 ;显示打补丁的相关信息
        ToolTip(@CR & "  共" & $FileList[0] & "个系统补丁," & $i & "秒后开始安装...   " & @CR, @DesktopWidth - 260, @DesktopHeight - 100)
        Sleep(1000)
Next
For $i = 1 To $FileList[0] ;开始批量打补丁
        ToolTip(@CR & "  正在安装 " & $FileList[$i] & " (" & $i & "/" & $FileList[0] & ")   " & @CR, @DesktopWidth - 300, @DesktopHeight - 100)
        RunWait(@ScriptDir & "\Update" & $FileList[$i] & " /quiet /passive /norestart")
Next
ToolTip(@CR & "  系 统 补 丁 安 装 完 毕 !  " & @CR, @DesktopWidth - 260, @DesktopHeight - 100)
Sleep(2000)
DirRemove(@ScriptDir & "\Update")
 楼主| 发表于 2010-4-22 17:27:11 | 显示全部楼层
回复 3# newuser
着急,等待老师们的帮助,谢谢!
 楼主| 发表于 2010-4-22 17:54:55 | 显示全部楼层
回复 1# newuser

郁闷,苦闷,以上代码为什么重新启动计算机后又好使?
为什么不稳定呢?
发表于 2010-4-22 20:02:45 | 显示全部楼层
估计问题出在这一句:
InetGet("http://10.64.240.23:801/patchs/PatchsList.txt","LocalPatchsList.txt",1,1)
最后一个1 表示不等下载完,就执行程序下面一句。下载PatchsList.txt虽然不需很长时间,但总是要花一点时间去下载的,特别是有时候网络不是很好的话,PatchsList.txt还没下载好,程序 就要执行_FileReadToArray(@ScriptDir & "\LocalPatchsList.txt",$PatchsFile) 这一句,当然 会发生错误的。
最后一个1 改成0,就应该没有什么问题了(。

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-4-22 23:29:18 | 显示全部楼层
你都说了没有等下载完,那么_FileReadToArray就很有可能出错。
 楼主| 发表于 2010-4-23 07:22:22 | 显示全部楼层
回复 6# shqf

最后一个1不是进行后台下载的意思吗?
 楼主| 发表于 2010-4-23 07:27:07 | 显示全部楼层
回复 7# zjimmy

但是发生这样的错误时,我检查LocalPatchsList.txt已经下载到本地机器里,而且内容完整.关键是重新启动计算机后,再经过多次尝试,这个问题是不出现的.
发表于 2010-4-23 08:50:24 | 显示全部楼层
如果不用后台下载,是否还是会出现错误?
 楼主| 发表于 2010-4-23 09:14:05 | 显示全部楼层
回复 10# zjimmy

非常奇怪,我绝对没有动过任何东西,到现在也还没有发生昨天的错误,依然采取"后台下载".真是奇怪?
发表于 2010-4-23 09:50:44 | 显示全部楼层
回复  zjimmy

非常奇怪,我绝对没有动过任何东西,到现在也还没有发生昨天的错误,依然采取"后台下载".真是 ...
newuser 发表于 2010-4-23 09:14



    后台下载并不保险,只要有一次出错,那这个代码就需要完善。
时间换取稳定,我想还是必要的。
 楼主| 发表于 2010-4-23 09:56:36 | 显示全部楼层
回复 12# zjimmy

谢谢,我觉得也是,另外,请教批量打补丁如何效率更高呢?我尝试上面的代码批量打了6个补丁,大小都是3、4   M的,可是感觉硬盘嘎吱嘎吱的,虽然也不过用了4 、5分钟,感觉不好!
用 360 打那么多补丁,怎么那么快呢?难道是心理作用吗?当然,人家的东西毕竟是比咱的强大的多!
发表于 2010-4-23 10:00:42 | 显示全部楼层
回复  zjimmy

谢谢,我觉得也是,另外,请教批量打补丁如何效率更高呢?我尝试上面的代码批量打了6个补丁,大 ...
newuser 发表于 2010-4-23 09:56



    那段代码应该没有问题。
我想360不可能比微软本身还要快吧?那些补丁的静默安装参数是微软官方提供的。
 楼主| 发表于 2010-4-23 10:56:57 | 显示全部楼层
回复 14# zjimmy

谢谢,看看用户用完什么感觉.
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-2 13:02 , Processed in 0.101318 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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