1

我想创建一个应用程序,它应该用于在没有互联网连接的情况下更新计算机。为了解决这个问题,软件首先从微软下载了当前的 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

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

4

1 回答 1

2

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

  • wsusscn2.cab 仅用于在无法访问公共 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 Update 代理 API(以及一般的 Windows Update)旨在告诉您需要在给定计算机上安装什么。为了在合理的时间内完成搜索,WU 引擎会忽略所有基于 WU 已知信息而无法应用的更新信息。(例如,一旦 WU 确定它在运行 Windows 10 1903 的 PC 上运行,它将忽略所有无法在该操作系统版本上安装的更新。一旦 WU 确定它在 32 位操作系统上运行,它就会忽略 64 位- 仅更新。等等。)这意味着无论有没有 wsusscn2.cab,都无法让 Windows Update API 返回不适用于当前计算机的更新。所以除非两台电脑有完全相同的硬件和软件配置,https://docs.microsoft.com/en-us/windows/win32/wua_sdk/using-wua-from-a-remote-computer。)
于 2019-12-02T20:41:48.963 回答