Full Windows Update Reset & Clean-Up (Error 0x80070306)

Nero Atreides

Lt. Commander Pro
Registriert
Jan. 2004
Beiträge
1.383
Moin,

Updated: continued on GitHub.

nach einem extrem nervigen Karfreitag gibt es nun eine zugegeben komplexe, aber funktionierende Lösung für das jüngste Windows Update Problem (Installationsfehler 0x80070306 bei KB5086672, KB5079473).

Zugegeben, am besten funktioniert das Inplace-Upgrade, das dauert ca. 20 Min und danach ist alles gefixt. ABER nachdem ich mich 9h lang durch alles gepflügt habe, was man so anstellen kann ohne ein Inplace-Upgrade machen zu müssen will ich Euch das nicht vorenthalten. Ich habe es in eine .BAT gepackt, das Skript findet ihr unten. Wenn ihr den Code in eine Datei mit der Endung .bat kopiert, dann habt ihr ein ausführbares Skript für Windows.

Verwendung auf eigene Gefahr - bei mir hat es funktioniert.
Allein den Software Distribution Ordner mit 750.000 Dateien (!) loszuwerden war eine Offenbarung ;)

Have fun.

GitHub inkl. README und CHANGELOG.
Lässt sich dort besser pflegen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: mchawk777, Apple ][ und BFF
Coole Arbeit. 👍

Nero Atreides schrieb:
Allein den Software Distribution Ordner mit 750.000 Dateien (!) loszuwerden war eine Offenbarung

Fremd booten und weg loeschen.
Mach ich brutal mit einem Live-Linux oder Hiren's Boot CD wenn das laufende Windows partout nicht will.
Vorteil dabei, dass die Dienste welche den Ordner blockieren koennen nicht laufen.

Bei der Zeile wo Du die Dienste stoppst. War da der wuauserv ueberhaupt am laufen?
Weil eigentlich rennt der seit einiger Zeit nicht mehr staendig sondern nur auf Anforderung.
 
BFF schrieb:
Fremd booten und weg loeschen.

wozu ?

Administrative Powershell öffnen und folgende Befehle eingeben

Code:
Stop-Service wuauserv
 
Stop-Service bits
 
Remove-Item $env:windir\softwaredistribution -Recurse -Force
 
Start-Service wuauserv


dazu braucht es kein Fremd System, was erst aufwendig heruntergeladen und auf einen USB Stick etc erstellt werden muss.
Und wenn Dienste sich nicht beenden lassen wollen -> Reboot und gleich nach dem Start durcharbeiten.
 
  • Gefällt mir
Reaktionen: piepenkorn
Sebbi schrieb:

Weil in manchen Faellen das Verzeichnis trotz Stoppversuchen von Wuauserv & bits nicht loeschbar ist.

Und auch die Frage an Dich. Laeuft denn der wuauserv ueberhaupt wenn Du in stoppen willst?
Eigentlich rennt der nicht mehr lange wenn er das automatische Suchen/Installieren etc. abgearbeitet hat.

1775251377022.png


Sebbi schrieb:
was erst aufwendig heruntergeladen und auf einen USB Stick etc erstellt werden muss

Hat man? 🤷‍♂️
Zur Not tut es auch der Stick mit dem MCT. 😉
 
BFF schrieb:
Und auch die Frage an Dich. Laeuft denn der wuauserv ueberhaupt wenn Du in stoppen willst?

Gegenfrage: tut es denn weh, wenn man den Befehl im Script ausführt und die Antwort zurück bekommt, das der Dienst im Moment nicht gestartet ist?

Es würde mehr Probleme bereiten, das NICHT mit im Script zu haben und das der Dienst dann doch zufällig aktiv ist und Probleme beim Löschen veranstaltet.
 
Es geht da nicht wirklich darum das der Dienst versucht wird zu stoppen, das System sagt rennt nicht.
Es ist mir mehrfach schon unter gekommen, dass mein WindowsUpdateReinigerScript an der Stelle nichts tat wo schlussendlich die Verzeichnisse geloescht werden sollten Trotz Behauptung Dienst rennt nicht. Also hier bei mir:

Code:
Remove-Item -Path "$env:systemroot\SoftwareDistribution" -ErrorAction SilentlyContinue -Recurse
Remove-Item -Path "$env:systemroot\System32\Catroot2" -ErrorAction SilentlyContinue -Recurse

Ich verwende meist eine angepasste Version von hier:
https://github.com/Gaz2600/Reset-Windows-Update/blob/main/RstWinUpd.ps1

Aber egal.
Am Ende findet ein Jeder irgendwie seinen Weg.
 
  • Gefällt mir
Reaktionen: Nero Atreides
BFF schrieb:
Es ist mir mehrfach schon unter gekommen, dass mein WindowsUpdateReinigerScript an der Stelle nichts tat wo schlussendlich die Verzeichnisse geloescht werden sollten trotz Behauptung Dienst rennt nicht.

ok dann kann man auch mit der administrativen CMD arbeiten, das ist zuverlässiger und

Code:
"Remove-Item $env:windir\softwaredistribution -Recurse -Force"
 
ersetzen mit

rmdir /S /Q "C:\Windows\SoftwareDistribution"
 
  • Gefällt mir
Reaktionen: Nero Atreides
Nero Atreides schrieb:
Allein den Software Distribution Ordner mit 750.000 Dateien (!) loszuwerden war eine Offenbarung ;)
Bitte WAS IST DAS? 😲
Ich habe da gerade mal 19 Dateien in 24 Ordnern drin.
 
  • Gefällt mir
Reaktionen: Nero Atreides
Und noch einen kleinen Schönheitsfehler entdeckt.
qmgr*.dat existiert nicht unter Win10+11.
Bei Win 7+8 richtig, Del "%ALLUSERSPROFILE%\Microsoft\Network\Downloader\qmgr*.dat".
Bei Win 10+11 dann korrekt, Del "%ALLUSERSPROFILE%\Microsoft\Network\Downloader\qmgr.db".
 
  • Gefällt mir
Reaktionen: Nero Atreides
BFF schrieb:
Das Script bzw. eine Variante hatte ich auch vor mir, kann mann m.E. aber vergessen - der Großteil der DLLs die dort gelistet sind kann man unter Win11 (spätestens seit 24H2) nicht mehr manuell de-/registrieren.

bezelbube schrieb:
Bei Win 7+8 richtig, Del "%ALLUSERSPROFILE%\Microsoft\Network\Downloader\qmgr*.dat".
Bei Win 10+11 dann korrekt, Del "%ALLUSERSPROFILE%\Microsoft\Network\Downloader\qmgr.db".
Guter Hinweis danke, prüfe ich mal und ändere es dann im Script.

Sebbi schrieb:
"Remove-Item $env:windir\softwaredistribution -Recurse -Force"
ersetzen mit
rmdir /S /Q "C:\Windows\SoftwareDistribution"
Auch schönes Finish, nehme ich auch auf.

mchawk777 schrieb:
Ich habe da gerade mal 19 Dateien in 24 Ordnern drin.
Ich bin seit 2012 / Win 7 auf diesem System gewesen und habe einen Plattformwechsel (Intel > AMD) und mehrere AMD-Plattformupgrades durchgeführt ohne je eine "saubere" Neuinstallation zu machen. Da kann das schonmal passieren ;)
 
Nero Atreides schrieb:
Unbedingt als Admin ausführen!
Lass doch das Skript automatisch mit Admin-Rechten starten:

Code:
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
    echo.
    echo Request administrator privileges...
    echo.
    goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
    "%temp%\getadmin.vbs"
    exit /B
:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )

Nero Atreides schrieb:
Allein den Software Distribution Ordner mit 750.000 Dateien (!) loszuwerden war eine Offenbarung
Aber sicher nicht ursächlich für den Installationsfehler.
Dort werden für die Updateinstallation die MSU- und CAB-Dateien aufbereitet, da fallen durchaus mal mehrere tausend Dateien an.
 
  • Gefällt mir
Reaktionen: Nero Atreides
Zurück
Oben