更新Windows 更新代理

Windows 更新 代理 (WUA) 通过各种方式更新自身,具体取决于设备上运行的 Windows 版本。 旧版 WUA 可能无法连接到当前更新服务,可能与所有更新不兼容,并且可能不支持所有记录的 API。 下面介绍如何确保 WUA 完全更新且兼容。

在从 Windows 7 和 Windows Server 2008 R2 开始的 Windows 版本上

Windows 更新 代理 (WUA) 更新包含在通过 Windows 更新 或Windows Server Update Services (WSUS) 分发给 Windows 的定期更新中。 无需执行任何特殊步骤即可在这些 Windows 版本上更新 WUA。

在 Windows 7 和 Windows Server 2008 R2 之前的 Windows 版本上

当自动汇报连接到Windows 更新或 WSUS 时,WUA 会自动更新自身。

如果自动汇报尚未成功运行,则运行这些 Windows 版本的设备可能会运行不支持所有记录的 API 的较旧版本的 WUA。 如果在使用 WUA API 执行扫描、下载或安装时收到WU_E_SELFUPDATE_REQUIRED结果,则此错误会告诉你已安装的 WUA 版本太旧,无法连接到当前Windows 更新服务。 不能使用这些操作系统上的常规 WUA API 来更新 WUA。

用户可以手动将 WUA 更新到当前版本,方法是打开Windows 更新控制面板,选择“检查汇报”,然后接受显示的自我更新。 或者,也可以以编程方式更新 WUA。

在 Windows 7 和 Windows Server 2008 R2 之前的 Windows 版本上以编程方式更新 WUA

  1. 使用 WinHTTP API 下载 Wuredist.cab
  2. 使用 加密函数 验证下载 的Wuredist.cab 副本是否具有来自 Microsoft 的数字签名。 如果无法验证数字签名,请停止。
  3. 使用 文件解压缩接口 API 从 Wuredist.cab中提取 XML 文件。
  4. 使用 Microsoft XML Core Services (MSXML) API 加载 XML 文件,并找到计算机体系结构的 WURedist/StandaloneRedist/architecture 节点。 例如,对于 x86,找到 name 属性为 x86 的 WURedist/StandaloneRedist/architecture 节点。
  5. 调用 IWindowsUpdateAgentInfo::GetInfo 以确定 WUA 的当前版本。 如果 IWindowsUpdateAgentInfo::GetInfo 返回的版本号至少与你位于的体系结构节点中的 clientVersion 属性一样高,请停止。
  6. 使用 MSXML API 从你找到的体系结构节点读取 downloadUrl 属性。 downloadUrl 提供适用于计算机体系结构的相应 WUA 安装程序的下载 URL。
  7. 使用 WinHTTP API 下载相应的安装程序。
  8. 使用 CreateProcess 函数或类似 API 执行下载的安装程序。