AU3stfans 发表于 2018-4-27 23:02:02

如何判断系统已安装某个补丁<已解决>

本帖最后由 AU3stfans 于 2018-5-4 12:59 编辑

我想在给win8.1系统安装某个或某几个独立补丁前,用AU3编程判断这些补丁是否已安装,怎样才能实现,比如我给系统安装独立补丁KB299226前,先用脚本判断该补丁是否已安装。如果没有安装,则进行安装操作……谢谢!大神

zldfsz 发表于 2018-4-28 00:05:53

本帖最后由 zldfsz 于 2018-4-28 00:09 编辑

没win8系统,win7 64测试通过
#include <Constants.au3>
$hotfixid = "KB299226"
Local $foo = Run(@ComSpec & " /c wmic qfe GET hotfixid", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Local $line
Local $sResult
While 1
    $line = StdoutRead($foo)
    If @error Then ExitLoop
    $sResult &= $line
Wend
IfStringInStr($sResult,$hotfixid) Then
MsgBox(0, "结果", "补丁“"&$hotfixid&"”已安装")
Else
MsgBox(0, "结果", "补丁“"&$hotfixid&"”未安装")
EndIf

AU3stfans 发表于 2018-5-3 07:39:54

感谢大神指导。

zldfsz 发表于 2018-5-3 18:03:24

如果问题解决了,请编辑帖子在标题上加上【已解决】

AU3stfans 发表于 2018-5-4 11:05:50

回复 4# zldfsz

大神,有一点不明白就是下面的死循环,如果没有错误,会一直处于循环状态,后面的if语句是如何执行的?
    While 1

    $line = StdoutRead($foo)

    If @error Then ExitLoop

    $sResult &= $line

Wend

志艺风云 发表于 2018-5-4 11:58:00

如果$line = StdoutRead($foo,true)这样,就会死循环。
StdoutRead($foo)正常读取数据后,下一次会没读取到数据就返回一个错误, 则退出循环。

AU3stfans 发表于 2018-5-4 12:57:51

回复 6# 志艺风云
感谢大神
页: [1]
查看完整版本: 如何判断系统已安装某个补丁<已解决>