bingxing8000 发表于 2011-3-28 17:14:52

用AU3制作打补丁的工具

在网上找了一个打补丁的工具,如图。

这个工具会把当前的文件夹里所有的补丁都安装一遍
请问用AU3,如何实现这样的功能?

papapa314 发表于 2011-3-28 17:22:22

是不是用_FileListToArray得到目录下所有文件的路径,然后一个一个run

bingxing8000 发表于 2011-3-28 17:24:44

我没写过哦,没什么思路,不知道怎么写

卫和谐 发表于 2011-3-28 20:43:44

在论坛里搜一下,楼主会吧?

easefull 发表于 2011-3-28 20:50:10

FileFindFirstFile.FileFindNextFile.
然后一行行run吧

bingxing8000 发表于 2011-3-29 10:24:40

谢谢大家,已经可以了

bingxing8000 发表于 2011-3-29 11:03:00

; 显示当前目录中所有文件的文件名; 显示当前目录中所有文件的文件名
$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)
以上代码可以了,
但是多个的时候,会一起运行
需要的是一个一个的运行,
我在中间加了一个延迟,也不可以哦
不知道用什么方法可以解决

papapa314 发表于 2011-3-29 11:32:54

用runwait($file)

CCM 发表于 2011-3-29 11:42:17


While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
        ShellExecute($file)
我之前有写过一个,如上所述。

bingxing8000 发表于 2011-3-29 14:29:20

谢谢了,但是还是不太好用

shenrenba 发表于 2011-3-29 15:35:54

本帖最后由 shenrenba 于 2011-3-29 15:38 编辑

_filereadtoarray

另外系统补丁可以参数运行一个for 就可以了

CCM 发表于 2011-3-29 16:53:09

补丁会一口气全部开始执行是因为,没有条件让它停止,所以就自动执行下一个

如果所有补丁档案的运行方式都相同,那么就照我下面这样写就行了
但是安装步骤不一致时,就会出错。

另外补丁可以用 /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:03:52

本帖最后由 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","安装完毕")不过出了一个问题

望高手解答

CCM 发表于 2011-3-30 10:22:18

刚刚搜寻论坛,找到两行指令,更精简,楼主做个BAT档就行了....

@FOR %%A IN (*.exe) DO %%A /NOBACKUP /NORESTART /PASSIVE
@ECHO Finish! &&PAUSE

bingxing8000 发表于 2011-3-30 11:13:26

谢谢了,是非常的不错。
CCM,可以加你QQ不?
页: [1] 2
查看完整版本: 用AU3制作打补丁的工具