@echo off
title Reset Windows Update components
echo $Id: fix-windows-update.cmd 447 2024-01-09 16:51:59Z bertrand $
if "%1" == "" timeout /t 5
set DLDR=%ALLUSERSPROFILE%\Application Data\Microsoft\Network\Downloader
set SOFTDIST=%SystemRoot%\SoftwareDistribution
set CATROOT=%SYSTEMROOT%\System32\catroot2
echo Stopping Windows Update services
set SVC1=wuauserv
set SVC2=bits
set SVC3=cryptsvc
echo %SVC1%
sc qc %SVC1% | find "START_TYPE"
net stop %SVC1%
echo %SVC2%
sc qc %SVC2% | find "START_TYPE"
net stop %SVC2%
echo %SVC3%
sc qc %SVC3% | find "START_TYPE"
net stop %SVC3%
echo Cleaning Windows Update folders
if exist "%DLDR%" (del /q "%DLDR%\qmgr*.dat") else (echo "%DLDR%" not found, skipped)
if exist "%SOFTDIST%" (rd /s /q "%SOFTDIST%") else (echo "%SOFTDIST%" not found, skipped)
if exist "%CATROOT%" (ren "%CATROOT%" catroot2.bak) else (echo "%CATROOT%" not found, skipped)
echo Reseting Windows Update services security descriptors
sc sdset bits D:(A;CI;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)
sc sdset wuauserv D:(A;;CCLCSWRPLORC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)
echo Registering Windows Update ActiveX controls
set CURDIR=%~dp0
cd /d %windir%\system32
set RSFLAG=/s
regsvr32 %RSFLAG% atl.dll
regsvr32 %RSFLAG% urlmon.dll
regsvr32 %RSFLAG% mshtml.dll
regsvr32 %RSFLAG% shdocvw.dll
regsvr32 %RSFLAG% browseui.dll
regsvr32 %RSFLAG% jscript.dll
regsvr32 %RSFLAG% vbscript.dll
regsvr32 %RSFLAG% scrrun.dll
regsvr32 %RSFLAG% msxml.dll
regsvr32 %RSFLAG% msxml3.dll
regsvr32 %RSFLAG% msxml6.dll
regsvr32 %RSFLAG% actxprxy.dll
regsvr32 %RSFLAG% softpub.dll
regsvr32 %RSFLAG% wintrust.dll
regsvr32 %RSFLAG% dssenh.dll
regsvr32 %RSFLAG% rsaenh.dll
regsvr32 %RSFLAG% gpkcsp.dll
regsvr32 %RSFLAG% sccbase.dll
regsvr32 %RSFLAG% slbcsp.dll
regsvr32 %RSFLAG% cryptdlg.dll
regsvr32 %RSFLAG% oleaut32.dll
regsvr32 %RSFLAG% ole32.dll
regsvr32 %RSFLAG% shell32.dll
regsvr32 %RSFLAG% initpki.dll
regsvr32 %RSFLAG% wuapi.dll
regsvr32 %RSFLAG% wuaueng.dll
regsvr32 %RSFLAG% wuaueng1.dll
regsvr32 %RSFLAG% wucltui.dll
regsvr32 %RSFLAG% wups.dll
regsvr32 %RSFLAG% wups2.dll
regsvr32 %RSFLAG% wuweb.dll
regsvr32 %RSFLAG% qmgr.dll
regsvr32 %RSFLAG% qmgrprxy.dll
regsvr32 %RSFLAG% wucltux.dll
regsvr32 %RSFLAG% muweb.dll
regsvr32 %RSFLAG% wuwebv.dll
cd /d %CURDIR%
echo Starting Windows Update services
echo %SVC3%
net start %SVC3%
sc query %SVC3% | find "STATE"
echo %SVC2%
net start %SVC2%
sc query %SVC2% | find "STATE"
echo %SVC1%
net start %SVC1%
sc query %SVC1% | find "STATE"
echo Reseting Windows Update Bits service status
bitsadmin /reset /allusers
echo Reseting Windows Update client authorization
wuauclt /resetauthorization /detectnow
if "%1" == "" pause
