有没有下载所有 windows 更新的方法?

Is there a method to download all windows updates?

我想创建一个应用程序,用于在没有互联网连接的情况下更新计算机。为了解决这个问题,软件首先从微软下载当前的wsusscn2.cab。然后应用程序应该从 Microsoft 下载所有可能的更新文件。两者(wsusscn2.cab 和更新)都必须存在于远程计算机(例如 USB 记忆棒)上,并且程序会检查需要在系统上安装哪些更新。我的问题是第二步,应用程序应该下载所有更新文件。

我已经尝试读取 wsusscn2.cab 文件,但我真的找不到任何更新的下载 URI。我还尝试使用 IUpdateSearcher class 在文件中搜索更新,但它只能找到基于我的系统的更新(我想要所有可能的更新)。

UpdateSession session = new UpdateSession();
UpdateServiceManager manager = new UpdateServiceManager();
IUpdateService service = manager.AddScanPackageService("Offline Sync Service", SourceFilePath, 1);
IUpdateSearcher searcher = session.CreateUpdateSearcher();

searcher.ServiceID = service.ServiceID;
ISearchResult result = searcher.Search("IsInstalled=0 OR IsInstalled=1");

// continue with downloading

正如我所说,搜索功能的实际输出是基于我的系统。我希望能够获得所有更新。

遗憾的是,由于多种原因,这无法完成。

  • wsusscn2.cab 仅用于在无法访问 public Windows 更新服务或私人 WSUS 服务器的情况下检查计算机的当前状态。按照设计,它不允许下载或安装更新。
  • 在过去几年中,wsusscn2.cab 并未包含有关所有可用更新的信息。更新目录已经变得太大,无法将所有内容保存在一个合理大小的 CAB 文件中。因此,wsusscn2.cab 仅包含有关安全更新的信息(不包含其他类别的更新),如 https://docs.microsoft.com/en-us/windows/win32/wua_sdk/using-wua-to-scan-for-updates-offline 中所述。
  • Windows 更新代理 API——和一般的 Windows 更新——旨在告诉您需要在给定计算机上安装什么。为了在合理的时间内完成搜索,WU 引擎会忽略所有基于 WU 已知信息而无法应用的更新信息。 (例如,一旦 WU 在 PC 运行 Windows 10 1903 上确定它是 运行,它将忽略所有无法在该 OS 版本上安装的更新。一旦 WU确定它在 32 位 OS 上是 运行,它忽略仅 64 位的更新。等等。)这意味着没有办法 - 有或没有 wsusscn2.cab -- 获取不适用于当前计算机的 Windows 更新 API 至 return 更新。因此,除非两台计算机具有完全相同的硬件和软件配置,否则无法在计算机 A 上执行 WUA API 搜索 returns 更新仅适用于计算机 B。(你能想到的最接近的从计算机 A 执行此操作是使用 WUA 的远程功能在计算机 B 上触发扫描,如 https://docs.microsoft.com/en-us/windows/win32/wua_sdk/using-wua-from-a-remote-computer 中所述。)