0

我想以编程方式检测当前的 Windows 10 更新状态。

我尝试了 wuapi,它运行良好,但 wuapi 存在一些问题。

首先,获取更新信息需要很长时间。

二是不能离线使用。

还有其他方法可以检测当前的 Windows 10 更新状态吗?是否有任何注册表或系统文件来检测它?

我尝试使用 procmon 进行分析,但是与 windows udpate 链接的文件和注册表太多。

谢谢...

4

2 回答 2

1

" COM API

COM API 是一种无需解析日志即可直接访问 Windows 更新的好方法。此 API 的应用范围从在计算机上查找可用更新到安装和卸载更新。

您可以使用 Microsoft.Update.Session 类运行更新搜索,然后计算可用更新的数量以查看计算机是否有任何更新。

PowerShell 示例:

$updateObject = New-Object -ComObject Microsoft.Update.Session
$updateObject.ClientApplicationID = "Serverfault Example Script"
$updateSearcher = $updateObject.CreateUpdateSearcher()
$searchResults = $updateSearcher.Search("IsInstalled=0")
Write-Host $searchResults.Updates.Count

如果返回的结果大于 0,则需要安装和/或下载计算机的更新。您可以轻松更新 powershell 脚本以适应您的应用程序。

请注意,搜索功能似乎不是异步的,因此它会在搜索时冻结您的应用程序。在这种情况下,您将希望使其异步。”


注册表方法

在此处输入图像描述


来源:

https://serverfault.com/questions/891188/is-it-possible-to-detect-the-windows-update-status-via-registry-to-see-if-the-s

于 2019-11-25T03:16:35.100 回答
1

没有记录的方法可以访问自动更新正在使用的搜索结果(设置中的 Windows 更新页面显示的结果)。

但是,有两件事可能对您有用:

  • 您可以使用IAutomaticUpdatesResults::LastInstallationSuccessDate立即查看计算机上次成功安装更新的时间。如果您只想知道“这台 PC 处理更新是否成功?”,那么这可能就是您所需要的。
  • 您可以使用 Windows Update API 搜索来查看需要哪些更新。这是一个可以用作起点的脚本。如果您按原样使用此脚本,它将在线查找新发布的更新,这不是您在方案中想要的。但是您可以在调用 Search 之前将 IUpdateSearcher 对象的Online属性设置为 false。这样做将执行离线扫描,其中 WU 只是重新评估它已经知道的更新。这将离线工作,也将返回更快的结果。
于 2019-12-02T20:30:23.013 回答