用AU3制作打补丁的工具
在网上找了一个打补丁的工具,如图。这个工具会把当前的文件夹里所有的补丁都安装一遍
请问用AU3,如何实现这样的功能? 是不是用_FileListToArray得到目录下所有文件的路径,然后一个一个run 我没写过哦,没什么思路,不知道怎么写 在论坛里搜一下,楼主会吧? FileFindFirstFile.FileFindNextFile.
然后一行行run吧 谢谢大家,已经可以了 ; 显示当前目录中所有文件的文件名; 显示当前目录中所有文件的文件名
$search = FileFindFirstFile("*.*")
; 检查搜索是否成功
If $search = -1 Then
MsgBox(0, "错误", "没有文件/目录 匹配搜索")
Exit
EndIf
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop
Sleep(1000)
Run($file)
WEnd
; 关闭搜索句柄
FileClose($search)
以上代码可以了,
但是多个的时候,会一起运行
需要的是一个一个的运行,
我在中间加了一个延迟,也不可以哦
不知道用什么方法可以解决 用runwait($file)
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop
ShellExecute($file)
我之前有写过一个,如上所述。 谢谢了,但是还是不太好用 本帖最后由 shenrenba 于 2011-3-29 15:38 编辑
_filereadtoarray
另外系统补丁可以参数运行一个for 就可以了 补丁会一口气全部开始执行是因为,没有条件让它停止,所以就自动执行下一个
如果所有补丁档案的运行方式都相同,那么就照我下面这样写就行了
但是安装步骤不一致时,就会出错。
另外补丁可以用 /passtive 跟 /quiet 来设定自动安装,不过这参数我不会加
期待高手帮忙
我这边是繁体环境,虽然转成简体字,但视窗内的字肯定不同,楼主自己改吧
$search = FileFindFirstFile("*.exe")
If $search = -1 Then
MsgBox(0, "Warning!", "No File ")
Exit
EndIf
$i = 0
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop
ShellExecute($file)
WinWaitActive("软件更新安装精灵","使用这个精灵安装下列软件更新")
ControlClick("软件更新安装精灵","使用这个精灵安装下列软件更新","Button3")
WinWaitActive("软件更新安装精灵","请阅读下列的授权合约")
ControlCommand("软件更新安装精灵","请阅读下列的授权合约","Button2","check")
ControlClick("软件更新安装精灵","请阅读下列的授权合约","Button8")
WinWaitActive("软件更新安装精灵","若要关闭这个精灵")
ControlClick("软件更新安装精灵","若要关闭这个精灵","Button17")
$i = $i + 1
WEnd
MsgBox(0, "Auto Install Script", "Total " & $i & " Files")
FileClose($search)
本帖最后由 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
$FixName=StringSplit($List[$i],"-")
$FixName=$FixName
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 ;该表达式的值为true(真)则重复执行循环体语句(以WEnd为结束标志),否则循环结束.
$FixName=StringSplit($List[$i],"-") ;StringSplit以指定分隔符把字符串拆分成若干子串.
$FixN=$FixName
If Not StringInStr($Exists,$FixN) Then
RunWait(@ScriptDir&"\hotfix\"&$List[$i]&" /quiet /passive /norestart")
EndIf
$i+=1
WEnd
msgbox(64,"ok","安装完毕")不过出了一个问题
望高手解答 刚刚搜寻论坛,找到两行指令,更精简,楼主做个BAT档就行了....
@FOR %%A IN (*.exe) DO %%A /NOBACKUP /NORESTART /PASSIVE
@ECHO Finish! &&PAUSE 谢谢了,是非常的不错。
CCM,可以加你QQ不?
页:
[1]
2