找回密码
 加入
搜索
楼主: bingxing8000

[AU3基础] 用AU3制作打补丁的工具

 火.. [复制链接]
发表于 2011-4-4 21:46:36 | 显示全部楼层
学习一下,学习一下
发表于 2011-4-5 11:40:51 | 显示全部楼层
学习了。。。。
发表于 2011-4-13 10:03:33 | 显示全部楼层
回复 13# bingxing8000
代码没有问题,少了一个判断目录是否为空的判断,所以,如果补丁目录为空时,数组就无法定义了。
所以程序就出错了。
添加一个判断目录是否为空的就OK了,为空就退出不处理就行了。

Local $List=_FileListToArray(@ScriptDir&"\hotfix","*",1)

If DirGetSize(@ScriptDir&"\hotfix") = 0 then
msgbox(0,"提示","未找到补丁")
Exit
EndIf

While $i<=$List[0]

这样程序就不会报错了。
发表于 2011-4-13 10:33:29 | 显示全部楼层
今天看了一下,程序有两个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[0]                                        ;该表达式的值为true(真)则重复执行循环体语句(以WEnd为结束标志),否则循环结束.
$FixName=StringSplit($List[$i],"-")                       ;StringSplit以指定分隔符把字符串拆分成若干子串.
$FixN=$FixName[2]
If StringLeft($FixN, 2) <> "KB" Then ;解决WindowsXP-WindowsMedia-KB954155-x86-CHS.exe之类的补丁的KB判断问题
        $FixN=$FixName[3]
EndIf
If Not StringInStr($Exists,$FixN) Then
RunWait(@ScriptDir&"\hotfix\"&$List[$i]&" /quiet /passive /norestart")
EndIf
$i+=1
WEnd
msgbox(64,"ok","安装完毕")
发表于 2011-4-13 10:34:28 | 显示全部楼层
谢谢了,是非常的不错。
CCM,可以加你QQ不?
bingxing8000 发表于 2011-3-30 11:13


这个不会判断是不是已经安装过了,只会都装一遍!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-13 00:47 , Processed in 0.067739 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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