Центр обновления Windows является механизмом операционной системы, который имеет множество точек потенциального отказа: ошибки в структуре зависимостей (связности) обновлений друг с другом, нестабильная среда передачи данных (клиент-сервер), превышение жестко заданного размера различных внутренних структур (к примеру: списков обновлений), повреждение файлов хранилища компонентов, повреждение базы/каталога распространения, задвоение идентификаторов клиентов и многое многое другое. Ошибок, возникающих в процессе работы Центра обновления Windows, более чем достаточно, по самым скромным подсчетам имеется порядка 700 событий отказа. На различных этапах функционирования центра обновлений Windows: получения, обработки и установки обновлений, данные пакетов обновлений могут повреждаться, либо сами обновления могут переходить в неустанавливаемое состояние из-за отсутствующих/поврежденных зависимостей. На основании изложенного, к слову сказать, далеко не полного перечня проблем центра обновления Windows, можно прийти к выводу, что вероятность сбоев в его работе довольно высока, что фактически и подтверждается миллионами сообщений на данную тематику с официальных форумов Microsoft. Результатом сбоев для конечного пользователя является возникновение разного рода отказов (ошибок) в процессе установки обновлений операционной системы.
В практике устранения инцидентов, возникающих при работе центра обновления Windows, приведенная в таблице выше группа ошибок имеет следующие причины:
- повреждение/рассинхронизированное состояние содержимого, располагающегося в структуре каталога распространения (SoftwareDistribution);
- проблемы функционирования ключевых служб центра обновления Windows;
- проблемы в работе Фоновой интеллектуальной службы передачи (BITS) (Queue Manager), производящей подкачку обновлений;
- некорректные идентификаторы (привязки) клиента локального WSUS;
- некорректная настройка параметров (дескрипторов) безопасности служб центра обновления Windows;
- ошибки в регистрации компонентов служб (ключевых системных библиотек);
- проблемы соединения клиента-сервера (проблемы в работе транзитных/локальных прокси-серверов);
Естественно, самым надежным алгоритмом поиска причины отказа было бы проведение анализа деталей при помощи файлов журнала %Windir%\WindowsUpdate.log и %Windir%\Logs\CBS\CBS.log, тем не менее это очень долгий и кропотливый путь, итогом которого, с большой вероятность, будет набор методик, описанных в данной статье. Разработчики все это уже сделали за нас :) Поэтому логичнее воспользоваться уже опубликованным, официально-рекомендованным разработчиками методом, носящем название сброс центра обновления Windows (Windows Update Reset).
Сброс в ручном режиме
Итак, для исправления ситуации, возникающей при повреждении/рассинхронизации содержимого папки %Windir%\SoftwareDistribution, Microsoft рекомендует восстановить "исходное" состояние компонентов Центра обновления Windows, для этого нам предлагается выполнить следующую последовательность действий:
- Откройте окно командной строки. Для этого нажмите и удерживайте (или щелкните правой кнопкой мыши) кнопку с эмблемой Windows на панели задач, а затем выберите пункт Командная строка (Администратор). Если включен Контроль учетных записей (UAC), то в появившемся окне Контроль учетных записей нажмите кнопку Да. Либо нажмите клавишу Пуск -> в строке поиска и введите команду cmd. В результатах поиска щелкните правой кнопкой мыши на пункте, в ниспадающем меню выберите пункт Запуск от имени администратора. Либо нажмите клавишу с эмблемой Win + R, введите в поле ввода открывшегося окна команду cmd и нажмите клавишу ВВОД.
- Остановите работу следующих служб: Фоновая интеллектуальная служба передачи (BITS), Центр обновления Windows, Удостоверение приложения, Служба криптографии и Узел агента SMS (если используется). Для этого в командной строке введите (последовательно) следующие команды:
net stop bits
net stop wuauserv
net stop appidsvc
net stop cryptsvc
net stop ccmexec
- Удалите файлы очередей Фоновой интеллектуальной службы передачи (BITS) (файлы вида qmgr?.dat). Для этого введите в командной строке приведенную ниже команду и нажмите клавишу ВВОД:
del "%ALLUSERSPROFILE%\Application Data\Microsoft\Network\Downloader\qmgr*.dat" - Переименуйте каталог распространения и каталог сигнатур пакетов обновлений (создайте их резервные копии). Для этого в командной строке введите следующие команды:
ren %systemroot%\SoftwareDistribution SoftwareDistribution.bak
ren %systemroot%\system32\catroot2 catroot2.bak - Установите для служб Фоновая интеллектуальная служба передачи (BITS) и Центр обновления Windows разрешения по умолчанию (делается это на случай, если разрешения для службы были изменены). Для этого в командной строке введите следующие команды:
sc.exe sdset bits D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)
sc.exe sdset wuauserv D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)
- Только для систем, использующих SCCM (System Center Control Manager): удалите содержимое папки C:\CACHE\ccmcache;
- Повторно зарегистрируйте файлы служб Фоновая интеллектуальная служба передачи (BITS) и Центр обновления Windows. Для этого в командной строке введите следующую команду:
cd /d %windir%\system32
затем выполните серию команд:
regsvr32.exe /s atl.dll
regsvr32.exe /s urlmon.dll
regsvr32.exe /s mshtml.dll
regsvr32.exe /s shdocvw.dll
regsvr32.exe /s browseui.dll
regsvr32.exe /s jscript.dll
regsvr32.exe /s vbscript.dll
regsvr32.exe /s scrrun.dll
regsvr32.exe /s msxml.dll
regsvr32.exe /s msxml3.dll
regsvr32.exe /s msxml6.dll
regsvr32.exe /s actxprxy.dll
regsvr32.exe /s softpub.dll
regsvr32.exe /s wintrust.dll
regsvr32.exe /s dssenh.dll
regsvr32.exe /s rsaenh.dll
regsvr32.exe /s gpkcsp.dll
regsvr32.exe /s sccbase.dll
regsvr32.exe /s slbcsp.dll
regsvr32.exe /s cryptdlg.dll
regsvr32.exe /s oleaut32.dll
regsvr32.exe /s ole32.dll
regsvr32.exe /s shell32.dll
regsvr32.exe /s initpki.dll
regsvr32.exe /s wuapi.dll
regsvr32.exe /s wuaueng.dll
regsvr32.exe /s wuaueng1.dll
regsvr32.exe /s wucltui.dll
regsvr32.exe /s wups.dll
regsvr32.exe /s wups2.dll
regsvr32.exe /s wuweb.dll
regsvr32.exe /s qmgr.dll
regsvr32.exe /s qmgrprxy.dll
regsvr32.exe /s wucltux.dll
regsvr32.exe /s muweb.dll
regsvr32.exe /s wuwebv.dll - Удалить идентификаторы привязки клиента к локальному серверу WSUS:
REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v AccountDomainSid /f
REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v PingID /f
REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v SusClientId /f - Перезапустите Windows Sockets (Winsock). С этой целью введите в командной строке приведенную ниже команду:
netsh winsock reset - Установите прямой (в обход прокси-сервера) доступ в Сеть для приложений, работающих через функции интерфейса WinHTTP (фактически протокол HTTP/1.1). Для этого измените параметры локальной настройки прокси-сервера.
Если у вас операционная система Windows XP:
proxycfg.exe -dЕсли у вас установлена другая (более новая) версия Windows:
netsh winhttp reset proxy - Запустите следующие службы: Узел агента SMS, Фоновая интеллектуальная служба передачи (BITS), Центр обновления Windows, Удостоверение приложения и Служба криптографии. Для этого в командной строке последовательно выполните следующие команды:
net start ccmexec
net start bits
net start wuauserv
net start appidsvc
net start cryptsvc - Только для Windows Vista: очистите "список ожидания" Фоновой интеллектуальной службы передачи (BITS). Для этого выполните в командной строке команду:
bitsadmin.exe /reset /allusers - Установите последнюю версию агента Центра обновления Windows;
- Перезагрузите компьютер (операционную систему).
Автоматический сброс (скрипт)
Понятное дело что не всегда хочется вот так вот сидеть и руками вколачивать в командную строку кучу команд. Для самых ленивых (в том числе и для меня) предназначается следующий фрагмент скрипта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
@echo off REM Windows Update Reset cls :START echo Stopping services net stop bits net stop wuauserv net stop appidsvc net stop cryptsvc net stop ccmexec echo. echo Delete network queue Del "%ALLUSERSPROFILE%\Application Data\Microsoft\Network\Downloader\qmgr*.dat" echo. :DLLS echo Renaming SoftwareDistribution folder Ren %systemroot%\SoftwareDistribution SoftwareDistribution.bak Ren %systemroot%\system32\catroot2 catroot2.bak echo. :SECSVC echo Reset services security descriptor sc.exe sdset bits D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU) sc.exe sdset wuauserv D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU) echo. :REGSVC echo Register services cd /d %windir%\system32 regsvr32.exe /s atl.dll regsvr32.exe /s urlmon.dll regsvr32.exe /s mshtml.dll regsvr32.exe /s shdocvw.dll regsvr32.exe /s browseui.dll regsvr32.exe /s jscript.dll regsvr32.exe /s vbscript.dll regsvr32.exe /s scrrun.dll regsvr32.exe /s msxml.dll regsvr32.exe /s msxml3.dll regsvr32.exe /s msxml6.dll regsvr32.exe /s actxprxy.dll regsvr32.exe /s softpub.dll regsvr32.exe /s wintrust.dll regsvr32.exe /s dssenh.dll regsvr32.exe /s rsaenh.dll regsvr32.exe /s gpkcsp.dll regsvr32.exe /s sccbase.dll regsvr32.exe /s slbcsp.dll regsvr32.exe /s cryptdlg.dll regsvr32.exe /s oleaut32.dll regsvr32.exe /s ole32.dll regsvr32.exe /s shell32.dll regsvr32.exe /s initpki.dll regsvr32.exe /s wuapi.dll regsvr32.exe /s wuaueng.dll regsvr32.exe /s wuaueng1.dll regsvr32.exe /s wucltui.dll regsvr32.exe /s wups.dll regsvr32.exe /s wups2.dll regsvr32.exe /s wuweb.dll regsvr32.exe /s qmgr.dll regsvr32.exe /s qmgrprxy.dll regsvr32.exe /s wucltux.dll regsvr32.exe /s muweb.dll regsvr32.exe /s wuwebv.dll echo. :IDENT echo Delete WSUS IDs REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v AccountDomainSid /f REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v PingID /f REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v SusClientId /f echo. :WINSOCK echo Windows sockets reset netsh winsock reset echo. :RESETPROXY echo Proxy parameters reset proxycfg.exe -d bitsadmin.exe /reset /allusers netsh winhttp reset proxy echo. :STARTSVC echo Starting services net start ccmexec net start bits net start wuauserv net start appidsvc net start cryptsvc echo. shutdown -r -t 60 -c "Restart for Update fix" |
Еще один вариант скрипта для операционной системы Windows 10:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
@ECHO OFF echo . echo Simple Script to reset Windows updates components-credits to Shawn Brink for the commands. echo . PAUSE echo . set b=0 :bits set /a b=%b%+1 if %b% equ 3 ( goto end1 ) net stop bits echo Checking the bits service status. sc query bits | findstr /I /C:"STOPPED" if not %errorlevel%==0 ( goto bits ) goto loop2 :end1 cls echo. echo Failed to reset Windows Update due to bits service failing to stop echo Please run the script as administartor by right clicking the WuReset file or your BITS service isn't responding. echo. pause goto Start :loop2 set w=0 :wuauserv set /a w=%w%+1 if %w% equ 3 ( goto end2 ) net stop wuauserv echo Checking the wuauserv service status. sc query wuauserv | findstr /I /C:"STOPPED" if not %errorlevel%==0 ( goto wuauserv ) goto loop3 :end2 cls echo. echo Failed to reset Windows Update due to wuauserv service failing to stop. echo. pause goto Start :loop3 set app=0 :appidsvc set /a app=%app%+1 if %app% equ 3 ( goto end3 ) net stop appidsvc echo Checking the appidsvc service status. sc query appidsvc | findstr /I /C:"STOPPED" if not %errorlevel%==0 ( goto appidsvc ) goto loop4 :end3 cls echo. echo Failed to reset Windows Update due to appidsvc service failing to stop. echo. pause goto Start :loop4 set c=0 :cryptsvc set /a c=%c%+1 if %c% equ 3 ( goto end4 ) net stop cryptsvc echo Checking the cryptsvc service status. sc query cryptsvc | findstr /I /C:"STOPPED" if not %errorlevel%==0 ( goto cryptsvc ) goto Reset :end4 cls echo. echo Failed to reset Windows Update due to cryptsvc service failing to stop. echo. pause goto Start :Reset Ipconfig /flushdns del /s /q /f "%ALLUSERSPROFILE%\Application Data\Microsoft\Network\Downloader\qmgr*.dat" cd /d %windir%\system32 if exist "%SYSTEMROOT%\winsxs\pending.xml.bak" del /s /q /f "%SYSTEMROOT%\winsxs\pending.xml.bak" if exist "%SYSTEMROOT%\winsxs\pending.xml" ( takeown /f "%SYSTEMROOT%\winsxs\pending.xml" attrib -r -s -h /s /d "%SYSTEMROOT%\winsxs\pending.xml" ren "%SYSTEMROOT%\winsxs\pending.xml" pending.xml.bak ) if exist "%SYSTEMROOT%\SoftwareDistribution.bak" rmdir /s /q "%SYSTEMROOT%\SoftwareDistribution.bak" if exist "%SYSTEMROOT%\SoftwareDistribution" ( attrib -r -s -h /s /d "%SYSTEMROOT%\SoftwareDistribution" ren "%SYSTEMROOT%\SoftwareDistribution" SoftwareDistribution.bak ) if exist "%SYSTEMROOT%\system32\Catroot2.bak" rmdir /s /q "%SYSTEMROOT%\system32\Catroot2.bak" if exist "%SYSTEMROOT%\system32\Catroot2" ( attrib -r -s -h /s /d "%SYSTEMROOT%\system32\Catroot2" ren "%SYSTEMROOT%\system32\Catroot2" Catroot2.bak ) if exist "%SYSTEMROOT%\WindowsUpdate.log.bak" del /s /q /f "%SYSTEMROOT%\WindowsUpdate.log.bak" if exist "%SYSTEMROOT%\WindowsUpdate.log" ( attrib -r -s -h /s /d "%SYSTEMROOT%\WindowsUpdate.log" ren "%SYSTEMROOT%\WindowsUpdate.log" WindowsUpdate.log.bak ) sc.exe sdset bits D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU) sc.exe sdset wuauserv D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU) regsvr32.exe /s atl.dll regsvr32.exe /s urlmon.dll regsvr32.exe /s mshtml.dll regsvr32.exe /s shdocvw.dll regsvr32.exe /s browseui.dll regsvr32.exe /s jscript.dll regsvr32.exe /s vbscript.dll regsvr32.exe /s scrrun.dll regsvr32.exe /s msxml.dll regsvr32.exe /s msxml3.dll regsvr32.exe /s msxml6.dll regsvr32.exe /s actxprxy.dll regsvr32.exe /s softpub.dll regsvr32.exe /s wintrust.dll regsvr32.exe /s dssenh.dll regsvr32.exe /s rsaenh.dll regsvr32.exe /s gpkcsp.dll regsvr32.exe /s sccbase.dll regsvr32.exe /s slbcsp.dll regsvr32.exe /s cryptdlg.dll regsvr32.exe /s oleaut32.dll regsvr32.exe /s ole32.dll regsvr32.exe /s shell32.dll regsvr32.exe /s initpki.dll regsvr32.exe /s wuapi.dll regsvr32.exe /s wuaueng.dll regsvr32.exe /s wuaueng1.dll regsvr32.exe /s wucltui.dll regsvr32.exe /s wups.dll regsvr32.exe /s wups2.dll regsvr32.exe /s wuweb.dll regsvr32.exe /s qmgr.dll regsvr32.exe /s qmgrprxy.dll regsvr32.exe /s wucltux.dll regsvr32.exe /s muweb.dll regsvr32.exe /s wuwebv.dll regsvr32 /s wudriver.dll netsh winsock reset netsh winsock reset proxy :Start net start bits net start wuauserv net start appidsvc net start cryptsvc echo Task completed sucessfully!Please restart your computer and check for the updates again. PAUSE |
Его можно закопипастить и сохранить в виде файла с именем (например) WindowsUpdateReset.bat.
Если есть проблемы с запуском службы (нет доступа), и в реестре значение не меняется... То можно вот этой утилитой воспользоваться https://docs.microsoft.com/en-us/sysinternals/downloads/pstools
Здесь инструкция http://www.outsidethebox.ms/10539/#_Toc277326816
Спасибо!!