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

时间:2019-01-18 21:58:30

标签: c# windows updates wuapi

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

我已经尝试读取wsusscn2.cab文件,但是我真的找不到任何更新的下载URI。我还尝试使用IUpdateSearcher类在文件中搜索更新,但它仅根据我的系统查找更新(我希望每个可能的更新)。

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

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

1 个答案:

答案 0 :(得分:0)

不幸的是,由于多种原因,这无法完成。

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