Mittwoch, 18. April 2012

Windows-Update-Client läuft Amok

Manche Windows - XP - Versionen brauchen gefühlt unendlich lange zum starten. Während dieser Zeit reagiert das Gerät nur sehr schleppend auf Eingaben und die Festplatte hört gar nicht auf zu rödeln.
Ein Blick in den Taskmanager offenbart eine "wuauclt.exe" und eine "svchost.exe" die jeweils einen dreistelligen Speicherbereich verschlingen und hohe Prozessorlast verursachen. 
Der Auslöser ist tatsächlich die "wuauclt.exe", der "Windows Update Automatic Update Client", welcher aus nicht geklärtem Grund Amok läuft. Er wird von der "svchost.exe" (dem Überprozess wenn man so will) gestartet, weshalb diese sich ebenfalls so sehr aufbläht.

Taskmanager mit wuauclt.exe
Abhilfe ist ganz einfach - man schießt den "wuauclt.exe" - Prozess einfach im Taskmanager ab und erfreut sich seines wieder lauffähigen Systems. Das Windows - Update nimmt dabei keinen Schaden, denn die "wuauclt.exe" wird sogleich neu gestartet, jedoch ohne nochmal die wahnsinnig hohe Speicherauslastung oder die Prozessorlast zu verursachen.
Nun mag es aber dem ein oder anderen lästig sein, erstmal den Taskmanager zu starten, denn dieser Vorgang dauert ja nunmal gefühlt ewig. Gute Erfahrung habe ich mit einem kleinen selbstgeschriebenen Batch-Programm gemacht, welches man z.B. in den Autostart-Ordner von Windows stecken kann und das bei jedem Computerstart den Updateclienten erstmal prophylaktisch über den Jordan schickt. Ein Doppelklick auf die auf dem Desktop liegende Datei tuts aber auch.
Hier ist es:

@echo off
set ProgEXE=wuauclt.exe
set tempdatei=TempDatei.txt
tasklist /FI "IMAGENAME eq %ProgEXE%" /FO CSV>%tempdatei%
for /F "skip=2 tokens=1 delims=," %%f in (%tempdatei%) do (
    echo gefiltert: [%%f]
    if "%%f"==""%ProgEXE%"" pcwkill /f %ProgEXE%
del /F/Q %tempdatei%

Zur Erklärung:
in den ersten beiden Zeilen werden die Variablen gesetzt für den Prozess den es abzuschiessen gilt
und für einen temporären Zwischenspeicher.
Dann wird das Programm TaskList ausgeführt, es stammt aus Microsofts Powertoy-Sammlung und zeigt in der Konsole die Liste der laufenden Programme an. Diese wird gleich nach dem Updater durchsucht. Wenn er läuft wird er sofort abgeschossen. Dazu bediene ich mich bei einem weiteren kleinen Helferlein. Das Progrämmchen PCWKill der PCWelt Redaktion erlaubt das kommandozeilengesteuerte Abschiessen einzelner Prozesse. Natürlich könnte ich auch das bei Windows integrierte Tool nehmen, aber das hat bei verschiedenen Win-Versionen verschiedene Namen und verschiedene Parameter und so müsste ich die Datei jedesmal anpassen.
Am Schluss wird natürlich aufgeräumt. Die Datei habe ich kill_up.bat genannt.

Soll das Programm automatisch gestartet werden, so empfiehlt es sich dieses erst zeitverzögert auszuführen, da man nie genau sagen kann, wann der Windows-Updater loslegt. Lösungen für dieses Problem gibts einige, ich habe mich für eine schnelle Variante mittels VBScript entschieden:

set wshell = CreateObject("Wscript.shell")
wscript.sleep 40000
wshell.run "C:\Beispielpfad\kill_up.bat"

Das ganze speichert man als z.B. kill_up.vbs im Autostart-Ordner (anpassen des Beispielpfades nicht vergessen) von Windows und die 40 Sekunden Zeitverzögerung schaffen dem Updater einen genügend großen Vorsprung vor unserem Killer!

Nachtrag: hab die 30 Sekunden Verzögerung in 40 geändert, nachdem es bei einigen Rechnern nicht geklappt hat (zur Not kann man natürlich auch die kill_up.vbs nochmal von Hand starten)

Update vom 30.01.2014 (!!!): Laut c't hat Microsoft für diesen Februar-Patchday ein Update angekündigt, welches dieses Problem ein für alle Mal aus der Welt schaffen soll - super, 2 Monate vor Schluss...

Keine Kommentare:

Kommentar veröffentlichen