Betrieb

Uninstall in der Praxis sauber planen und pruefen.

Ein guter Uninstall ist mehr als ein stiller Schalter. Er muss Return Codes, Reste, Benutzerkontext, Detection und moegliche Nacharbeiten sauber zusammenbringen.

Hersteller-Uninstall vor Cleanup

Erst den offiziellen Uninstall-Mechanismus nutzen, dann pruefen, welche Artefakte bewusst uebrig bleiben. Blindes Wegraeumen erzeugt spaeter schwer erklaerbare Seiteneffekte.

Per-User und Per-Machine trennen

Wenn ein Paket in AppData, HKCU oder im Benutzerprofil arbeitet, ist der Uninstall ohne Kontextpruefung unvollstaendig.

Per-User vs Per-Machine lesen

Detection nach Uninstall neu denken

Eine gute Detection fuer Installationen kann fuer Deinstallation zu streng oder zu locker sein. Pruefe immer, ob nach dem Uninstall noch bewusst vorhandene Reste die Erkennung stoeren.

HKCU- und Profil-Detection lesen

Rueckgabecodes nicht raten

Auch beim Entfernen bleiben 0, 3010 oder Herstellercodes relevant. Ein erfolgreicher Uninstall mit Reboot ist betrieblich etwas anderes als ein echter Hard Fail.

Exitcodes und Reboot lesen

Vor dem Lauf

  • Uninstall-String und Version dokumentieren
  • Installationskontext festhalten
  • Benutzte Dienste, Prozesse und Tasks erfassen
  • Detection-Artefakte notieren

Waehren des Laufs

  • Rueckgabecode sofort notieren
  • Hersteller-Log oder Toolkit-Log sichern
  • Neustartanfrage getrennt bewerten
  • Fehlende Rechte frueh erkennen

Nach dem Lauf

  • Dateien, Registry und Dienste neu pruefen
  • Detection erneut ausfuehren
  • Reinstall auf frischem Stand testen
  • Bewusste Reste dokumentieren

Operativer Abschluss

Erst wenn Deinstallation, Detection, Reinstall und Logging zusammenpassen, ist das Paket betriebsreif.

PowerShell
$uninstall = 'msiexec.exe /x {PRODUCT-CODE} /qn /L*v c:\logs\uninstall.log'
$proc = Start-Process -FilePath "cmd.exe" -ArgumentList "/c $uninstall" -Wait -PassThru

if ($proc.ExitCode -notin @(0, 3010)) {
  throw "Uninstall fehlgeschlagen. ExitCode=$($proc.ExitCode)"
}