我使用 DISM 來自訂和更新部署到電腦的映像。我在外部驅動器上執行此操作,因為它的 I/O 負擔非常重。不久前,我似乎將安裝在 F 磁碟機中的映像保留為 F:\WIN81MOUNT。文件就在那裡。然而運行dism /get-mountedwiminfo
顯示沒有安裝 WIM。因此,我不知道如何刪除 WIN81MOUNT,因為我無法重新掛載、卸載或僅刪除該資料夾(檔案具有 SYSTEM 等權限,因為它們位於 Windows 映像中)。
如何強制卸載或重新安裝此 WIM?我已經嘗試了所有標準選項,例如 unmount-wim、cleanup-image、remount-wim...它們都不起作用,說不支援該請求。日誌指示「這不是 WIM 安裝點。」。
答案1
以下資訊來自“http://trueliarx.blogspot.co.uk/2014/07/force-unmount-and-clean-up-of-wim-image.html”
使用 DISM 強制卸載和清理 Wim 映像
當您使用 RT7 (+ AIK) 時,有時會出現錯誤,指出已安裝 wim(例如
boot.wim
)。要解決該問題,您應該以管理員身份執行以下命令:
dism /cleanup-wim
如果它不起作用,我透過編輯註冊表並刪除其中的所有(必要的)條目找到了另一個解決方案:
HKLM\SOFTWARE\Microsoft\WIMMount\mounted images\
只要您是管理員,它就應該有效。
您已經使用過的常規程序(?)如下所示:
可以在日誌檔案中找到訊息,可以在以下位置找到:
C:\Windows\Logs\DISM\dism.log
對於先前在 64 位元 Windows 上執行的 64 位元服務工具;
在提升的命令提示字元問題中;
cd C:\Program Files\Windows AIK\Tools\amd64\Servicing
在同一提升的命令提示字元問題中;
dism /?
可能會顯示一些有用的信息。
在同一提升的命令提示字元問題中;
dism /Get-MountedWimInfo
可以顯示有關已安裝映像的資訊。
對於每個 Dir 問題,如果發現已安裝任何需要卸載的 Dirs;
dism /Unmount-Wim /Mountdir:C:\examplepath /commit
Get-MountedWimInfo
完成此操作後,可以使用 Windows 資源管理器刪除透過 找到的相關 wim 檔案。
答案2
上述方法都不適合我,因為看起來 dism 部分沒有什麼需要清理的,只是資料夾的權限。
我終於找到了一些有用的東西(如果上面列出的註冊表和 dism 解決方案不起作用):
首先,您必須變更「損壞的」安裝資料夾的擁有者權限:
右鍵點選資料夾 -> 屬性 -> 安全性標籤 -> 進階按鈕 -> 擁有者標籤 -> 編輯按鈕 -> 選擇您的使用者帳戶 -> 啟動替換子容器和物件的擁有者。
完成後,關閉所有屬性視窗並再次開啟屬性 -> 安全性標籤 -> 進階按鈕 -> 權限標籤 -> 變更權限按鈕 -> 新增您的使用者帳戶並選擇替換所有子物件...
然後以管理員權限開啟命令提示字元( https://technet.microsoft.com/fi-fi/library/cc947813%28v=ws.10%29.aspx )
輸入以下內容並按 Enter 鍵:
DISM /Cleanup-Wim 現在您應該能夠刪除所有剩餘的檔案/資料夾。
答案3
作為最後的手段:
- 開啟註冊表並前往 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WIMMount\Mounted Images 項目。
- 在那裡,您應該找到一個或多個具有奇怪名稱的子項,例如 [e86b54b7-dc5f-4c15-8eb5-9b615bc3b154]
- 打開這些資料夾中的第一個,看看它是否對應於看起來已損壞的已安裝映像;使用值 [Mount Path]、[WIM Path] 和 [Image Index] 進行尋找。
- 刪除並重新建立 Mount 資料夾..
答案4
使用 PowerShell 循環並卸載任何剩餘的 Wim。
$subKeyMatch = "Mount Path"
$orphMountedWims = @()
$regMounted = "REGISTRY::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WIMMount\mounted images"
$mountedKey = [array](Get-ChildItem "$($regMounted)\" -Recurse -Depth 0)
foreach ($key in $mountedKey) {
$keyProps = ((Get-Item -path "REGISTRY::$key").property)
foreach ($subKey in $keyProps) {
if ($subKey -like "$($subKeyMatch)") {
$regSubPropValue = Get-ItemProperty -path "REGISTRY::$Key" | Select-Object -ExpandProperty $subKey
$orphMountedWims += $regSubPropValue
}
}
}
if (($orphMountedWims | Measure-Object).Count -ge 1) {
Write-Warning "Orphaned WIM(s) have been found."
foreach ($oMWim in $orphMountedWims) {
try {
Write-Output "Attempting to dismount and discard changes for Orphaned [Path: $($oMWim)]"
Dismount-WindowsImage -Path "$($oMWim)"-Discard
Write-Output "Success discarding changes."
}
catch [System.exception] {
Write-Error "Error - Failed to dismount and dicard changed from Orphaned wim [Mount Path: $($oMWim)]. Error: $($_.exception.message)"
continue
}
}
}
else {
Write-output "No Orphaned WIM files found, module clear to run."
}