找回密码
 加入
搜索
查看: 2111|回复: 6

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

  [复制链接]
发表于 2018-4-27 23:02:02 | 显示全部楼层 |阅读模式
本帖最后由 AU3stfans 于 2018-5-4 12:59 编辑

我想在给win8.1系统安装某个或某几个独立补丁前,用AU3编程断这些补丁是否已安装,怎样才能实现,比如我给系统安装独立补丁KB299226前,先用脚本判断该补丁是否已安装。如果没有安装,则进行安装操作……谢谢!大神
发表于 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
If  StringInStr($sResult,$hotfixid) Then
MsgBox(0, "结果", "补丁“"&$hotfixid&"”已安装")
Else
MsgBox(0, "结果", "补丁“"&$hotfixid&"”未安装")
EndIf

评分

参与人数 1金钱 +50 收起 理由
水木子 + 50 学习了,谢谢!

查看全部评分

 楼主| 发表于 2018-5-3 07:39:54 | 显示全部楼层
感谢大神指导。
发表于 2018-5-3 18:03:24 | 显示全部楼层
如果问题解决了,请编辑帖子在标题上加上【已解决】
 楼主| 发表于 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)正常读取数据后,下一次会没读取到数据就返回一个错误, 则退出循环。
 楼主| 发表于 2018-5-4 12:57:51 | 显示全部楼层
回复 6# 志艺风云
感谢大神
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-18 23:17 , Processed in 0.077178 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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