Небольшой детектив на тему Windows Update (WU) и локальных обновлений.

 

В один казалось бы прекрасный день я решила как обычно пропатчить шиндовс. Синхронизация WSUS, выбор нужных апдейтов, поиск обновлений на клиентской машине. Всё как обычно. Если бы не одно но. При попытке скачать выбранные обновления ничего не происходило а через некоторое время обновление завершалось с ошибкой 80072EE2.

Что за черт? Подумала я и начала искать причину. Первым под подозрение попал фаервол, так как это был ближайший компонент который обновлялся и логически мог быть причиной. Но, ни копание в настройках, ни добавление IP сервера обновлений в белые списки не помогали. WU по прежнему видел новые апдейты но наотрез отказывался их качать. Наверное, самым логичным было бы сразу после этого заглянуть в лог WU, но разгребать 2 мегабайта текста мне не хотелось. Поэтому я продолжала поиск причины в фаерволе. Первая зацепка появилась тогда, когда после сброса настроек очередной запрос в фаерволе был в старую подсеть. Первый кусочек пазла был найден.

Проверив лог WU и отследив соединения через TCPView подозреваемый фаервол был отпущен как невиновный. Оказывается WU пытался качать обновления со старого IP в другой подсети. Окей, идем в настройки прокси и… там ничего. Ещё какое-то время с гуглом и оказывается что служба которая отвечает за выкачивание файлов (BITS) имеет свой собственный прокси с бэкджеком и шлюбками. АГА! Нахожу команду которая выставляет NO_PROXY для BITS, пытаюсь скачать обновления и…. НИ-ЧЕ-ГО! Клиент по-прежнему ломится на старый IP не обращая внимания на все мои призывы.

Финальным решением проблемы оказалась вот эта инструкция. Возможно что полностью она и не нужна, и хватит только части, но моих скромных познаний хватает только на общее понимание что оно делает. Итак:

1. Запускаем командную строку от администратора.
2. Вводим следующие команды. ( — комментарии )
net stop wuauserv — останавливаем WU
cd %systemroot% — идем в Windows
ren SoftwareDistribution SoftwareDistribution.old — ренеймаем директорию
net start wuauserv — запускаем WU
net stop bits — останавливаем BITS
net start bits — запускаем
net stop cryptsvc — останавливаем службу шифрования
cd %systemroot%\system32 — переходим в систем32
ren catroot2 catroot2.old — ренеймаем директорию
net start cryptsvc — запускаем службу
regsvr32 Softpub.dll /s — регистрируем dll
regsvr32 Wintrust.dll /s
regsvr32 Initpki.dll /s
regsvr32 Mssip32.dll /s
3. Перезагружаемся

После этого WU начинает стучаться на нужный нам IP указанный в настройках.