Wenn ein WIM-Image mit DISM eingebunden wird und man vergisst, es wieder ordnungsgemäß zu lösen, kann es später unter bestimmten Umständen nicht mehr auf regulärem Weg entfernt werden. Besonders problematisch ist dies, wenn das Einhängeverzeichnis auf einem externen Datenträger liegt oder gelöscht wurde. In solchen Fällen stellt DISM eine Reparaturfunktion zur Verfügung. Sollte diese nicht erfolgreich sein, bleibt als letzte Maßnahme die manuelle Bearbeitung der Registry.
Für das Bereitstellen eines WIM-Abbilds mit DISM ist ein leerer Ordner als Einhängepunkt erforderlich. DISM überträgt die Dateien des ausgewählten Images – spezifiziert über den Index-Parameter – in dieses Verzeichnis. Danach lassen sich Pakete hinzufügen oder entfernen.
Zum Abschluss der Bereitstellung entscheidet man, ob die vorgenommenen Änderungen übernommen oder verworfen werden sollen. Dies geschieht über einen der folgenden Befehle:
Um Änderungen zu verwerfen: dism.exe /Unmount-Wim /MountDir:<Mount-Verzeichnis> /discard
Um Änderungen zu übernehmen: dism.exe /Unmount-Wim /MountDir:<Mount-Verzeichnis> /commit
In manchen Fällen schlägt der Unmount-Vorgang jedoch fehl und es erscheint die Fehlermeldung:
Fehler 50 – Die Anforderung wird nicht unterstützt
Manuelle Entfernung einer WIM-Bereitstellung
Wenn der reguläre Unmount-Befehl keine Wirkung zeigt, bleibt als letzte Möglichkeit die manuelle Entfernung der Bereitstellung. Dazu muss in der Windows-Registry der entsprechende Eintrag gelöscht werden.
Navigieren Sie dazu zum folgenden Pfad:
HKLM:\SOFTWARE\Microsoft\WIMMount\mounted images\
Dort finden Sie Schlüssel, die jeweils einem Mount-Verzeichnis zugeordnet sind. Löschen Sie den Eintrag, der dem betroffenen Verzeichnis entspricht, um die fehlerhafte Bereitstellung zu entfernen.
Hier ist die PowerShell-Version zur manuellen Entfernung einer fehlerhaften WIM-Bereitstellung:
# WIM-Mount-Einträge aus der Registry abrufen
$mountedImagesPath = "HKLM:\SOFTWARE\Microsoft\WIMMount\Mounted Images"
$mountedKeys = Get-ChildItem -Path $mountedImagesPath
# Übersicht anzeigen
foreach ($key in $mountedKeys) {
$mountDir = Get-ItemProperty -Path $key.PSPath | Select-Object -ExpandProperty "MountDir"
Write-Host "Gefundener Eintrag:"
Write-Host "Key: $($key.PSChildName)"
Write-Host "Mount-Verzeichnis: $mountDir"
Write-Host ""
}
# Beispiel: Löschen eines bestimmten Eintrags
# ACHTUNG: Ersetzen Sie 'KeyName' durch den tatsächlichen Namen des zu löschenden Schlüssels
$targetKey = "$mountedImagesPath\KeyName"
Remove-Item -Path $targetKey -Force
Write-Host "Der Eintrag wurde entfernt."
Hier ist ein PowerShell-Skript, das alle Einträge unter HKLM:\SOFTWARE\Microsoft\WIMMount\Mounted Images löscht:
# Pfad zur Registry mit WIM-Mount-Einträgen
$mountedImagesPath = "HKLM:\SOFTWARE\Microsoft\WIMMount\Mounted Images"
# Prüfen, ob der Pfad existiert
if (Test-Path $mountedImagesPath) {
# Alle Unterschlüssel löschen
Get-ChildItem -Path $mountedImagesPath | ForEach-Object {
Remove-Item -Path $_.PSPath -Force
Write-Host "Gelöscht: $($_.PSChildName)"
}
Write-Host "Alle Einträge wurden erfolgreich entfernt."
} else {
Write-Host "Der Registry-Pfad existiert nicht oder enthält keine Einträge."
}
GUI Variante:
Add-Type -AssemblyName System.Windows.Forms
# GUI-Fenster erstellen
$form = New-Object System.Windows.Forms.Form
$form.Text = "WIM-Mount-Einträge entfernen"
$form.Size = New-Object System.Drawing.Size(500,400)
$form.StartPosition = "CenterScreen"
# ListBox zur Anzeige der Einträge
$listBox = New-Object System.Windows.Forms.ListBox
$listBox.Size = New-Object System.Drawing.Size(460,250)
$listBox.Location = New-Object System.Drawing.Point(10,10)
$form.Controls.Add($listBox)
# Button zum Löschen aller Einträge
$deleteButton = New-Object System.Windows.Forms.Button
$deleteButton.Text = "Alle Einträge löschen"
$deleteButton.Size = New-Object System.Drawing.Size(200,30)
$deleteButton.Location = New-Object System.Drawing.Point(10,270)
$form.Controls.Add($deleteButton)
# Button zum Schließen
$closeButton = New-Object System.Windows.Forms.Button
$closeButton.Text = "Schließen"
$closeButton.Size = New-Object System.Drawing.Size(100,30)
$closeButton.Location = New-Object System.Drawing.Point(370,270)
$form.Controls.Add($closeButton)
# Registry-Pfad
$mountedImagesPath = "HKLM:\SOFTWARE\Microsoft\WIMMount\Mounted Images"
# Einträge laden
if (Test-Path $mountedImagesPath) {
Get-ChildItem -Path $mountedImagesPath | ForEach-Object {
$mountDir = Get-ItemProperty -Path $_.PSPath | Select-Object -ExpandProperty "MountDir"
$listBox.Items.Add("Key: $($_.PSChildName) | MountDir: $mountDir")
}
} else {
$listBox.Items.Add("Keine Einträge gefunden oder Pfad existiert nicht.")
}
# Löschaktion
$deleteButton.Add_Click({
if (Test-Path $mountedImagesPath) {
Get-ChildItem -Path $mountedImagesPath | ForEach-Object {
Remove-Item -Path $_.PSPath -Force
}
$listBox.Items.Clear()
$listBox.Items.Add("Alle Einträge wurden gelöscht.")
}
})
# Schließen
$closeButton.Add_Click({ $form.Close() })
# GUI anzeigen
[void]$form.ShowDialog()