本帖最后由 bingxing8000 于 2011-3-29 18:05 编辑
谢谢各位。我在网上找了一个别人写的源码。我觉得挺不错,还可以不用安装重复的。
附上代码
别人写的没问题,别人的代码;程序名称 系统补丁静默安装器
;程序作者 一同
;版权所属 无忧天空
;支持网站 http://bbs.sky808.com/
;---------------------------------------
#Include <File.au3>
Local Const $hklm="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix"
;判断hotfix目录是否存在
If Not FileExists(@ScriptDir&"\hotfix") Then
DirCreate(@ScriptDir&"\hotfix")
MsgBox(64,"Error","未发现补丁程序,请将所有补丁程序拷贝至hotfix目录后在试!")
Exit
EndIf
ToolTip(@CR&"正在安装系统补丁,请稍后!"&@CR,@DesktopWidth-260,@DesktopHeight-120)
;读取已安装补丁
Local $i=1,$Exists=""
While 1
$Exists&=RegEnumKey($hklm,$i)
If @Error Then ExitLoop
$i+=1
WEnd
;打印列表并安装所有补丁
$i=1
Local $List=_FileListToArray(@ScriptDir&"\hotfix","*",1)
While $i<=$List[0]
$FixName=StringSplit($List[$i],"-")
$FixName=$FixName[2]
If Not StringInStr($Exists,$FixName) Then
RunWait(@ScriptDir&"\hotfix"&$List[$i]&" /quiet /passive /norestart")
EndIf
$i+=1
WEnd
msgbox(64,"ok","Finish.")
我修改后的#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","*",1)
While $i<=$List[0] ;该表达式的值为true(真)则重复执行循环体语句(以WEnd为结束标志),否则循环结束.
$FixName=StringSplit($List[$i],"-") ;StringSplit以指定分隔符把字符串拆分成若干子串.
$FixN=$FixName[2]
If Not StringInStr($Exists,$FixN) Then
RunWait(@ScriptDir&"\hotfix"&$List[$i]&" /quiet /passive /norestart")
EndIf
$i+=1
WEnd
msgbox(64,"ok","安装完毕")
不过出了一个问题
望高手解答 |