代码没有问题,少了一个判断目录是否为空的判断,所以,如果补丁目录为空时,数组就无法定义了。
所以程序就出错了。
添加一个判断目录是否为空的就OK了,为空就退出不处理就行了。
Local $List=_FileListToArray(@ScriptDir&"\hotfix","*",1)
If DirGetSize(@ScriptDir&"\hotfix") = 0 then
msgbox(0,"提示","未找到补丁")
Exit
EndIf
While $i<=$List
这样程序就不会报错了。 今天看了一下,程序有两个BUG,一个是空目录,一个是WindowsXP-WindowsMedia-KB954155-x86-CHS.exe之类的补丁问题,修正程序如下:
#Include <File.au3>
Local Const $hklm="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix"
ToolTip(@CR&"正在安装系统补丁,请稍后!")
Local $i=1,$Exists
While 1
$Exists=RegEnumKey($hklm,$i) ;RegEnumKey读取指定子键的名称.
If @Error Then ExitLoop
$i+=1
WEnd
$i=1
Local $List=_FileListToArray(@ScriptDir&"\hotfix","*KB*.EXE",1) ;查找有KB的补丁文件,不是的不会加数组
If $list = "" Then ;判断是否空目录
msgbox(0,"提示","未找到补丁")
Exit
EndIf
While $i<=$List ;该表达式的值为true(真)则重复执行循环体语句(以WEnd为结束标志),否则循环结束.
$FixName=StringSplit($List[$i],"-") ;StringSplit以指定分隔符把字符串拆分成若干子串.
$FixN=$FixName
If StringLeft($FixN, 2) <> "KB" Then ;解决WindowsXP-WindowsMedia-KB954155-x86-CHS.exe之类的补丁的KB判断问题
$FixN=$FixName
EndIf
If Not StringInStr($Exists,$FixN) Then
RunWait(@ScriptDir&"\hotfix\"&$List[$i]&" /quiet /passive /norestart")
EndIf
$i+=1
WEnd
msgbox(64,"ok","安装完毕") 谢谢了,是非常的不错。
CCM,可以加你QQ不?
bingxing8000 发表于 2011-3-30 11:13 http://www.autoitx.com/images/common/back.gif
这个不会判断是不是已经安装过了,只会都装一遍!!
页:
1
[2]