![强制 DISM 卸载/删除已安装的 Windows WIM](https://linux22.com/image/1497386/%E5%BC%BA%E5%88%B6%20DISM%20%E5%8D%B8%E8%BD%BD%2F%E5%88%A0%E9%99%A4%E5%B7%B2%E5%AE%89%E8%A3%85%E7%9A%84%20Windows%20WIM.png)
我使用 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,则对于每个 Dir 问题都需要卸载这些 Dir;
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 )
输入以下内容并按回车键:
DISM /Cleanup-Wim 现在您应该能够删除所有剩余的文件/文件夹。
答案3
最后的办法是:
- 打开注册表并转到键 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WIMMount\Mounted Images。
- 在那里,你应该找到一个或多个具有奇怪名称的子项,例如 [e86b54b7-dc5f-4c15-8eb5-9b615bc3b154]
- 打开第一个文件夹,找出它是否对应于看起来已损坏的已安装映像;使用值 [Mount Path]、[WIM Path] 和 [Image Index] 来查找。找到上述第 2 点中提到的正确子项后,将其删除。
- 删除并重新创建 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."
}