Есть ли способ загрузить все обновления Windows?
Я хочу создать приложение, которое должно использоваться для обновления компьютера без подключения к интернету. Чтобы решить проблему, программа сначала загружает текущий файл wsusscn2.cab от Microsoft. Затем приложение должно загрузить все возможные файлы обновлений от Microsoft. Оба (wsusscn2.cab & updates) должны присутствовать на удаленном компьютере (например, 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
Как я уже сказал, фактический вывод функции поиска зависит от моей системы. Я хочу иметь возможность получать все обновления.
0 ответов
К сожалению, это невозможно по нескольким причинам.
- 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.
- API агента Центра обновления Windows - и Центр обновления Windows в целом - предназначен для того, чтобы сообщать вам, что необходимо установить на данный компьютер. Чтобы выполнить поиск в разумные сроки, механизм WU игнорирует всю информацию об обновлениях, которая не может быть применима на основании того, что уже известно WU. (Например, как только WU устанавливает, что он работает на ПК под управлением Windows 10 1903, он игнорирует все обновления, которые нельзя установить в этой версии ОС. Как только WU устанавливает, что он работает в 32-разрядной ОС, он игнорирует 64-разрядную версию. -только обновления. И так далее.) Это означает, что нет способа - с wsusscn2.cab или без него - заставить API Центра обновления Windows возвращать обновления, которые не применимы к текущему компьютеру. Таким образом, если два компьютера не имеют одинаковой аппаратной и программной конфигурации,нет способа выполнить поиск API WUA на компьютере A, который возвращает обновления, предназначенные только для компьютера B. (Самое близкое, что вы можете сделать для этого с компьютера A, - это использовать удаленные возможности WUA для запуска сканирования на компьютере B, как обсуждалось в https://docs.microsoft.com/en-us/windows/win32/wua_sdk/using-wua-from-a-remote-computer.)