文件被占用时,先确认存在性与权限,再用powershell查占用进程;强制终止edge/chrome/explorer后重启资源管理器,shift+delete彻底删除;最后清空softwaredistribution缓存并重启系统。

确认文件是否真的存在且被占用
打开文件资源管理器,直接粘贴报错中提到的完整路径(例如 C:\Windows\Temp\KB1234567.msu),按回车。如果文件确实存在,右键→「属性」→「安全」选项卡,检查当前用户是否有「读取」权限;若无,说明系统连读都失败,后续写入必然报 0x80070050。
用 PowerShell(管理员)执行:Get-Process -Filepath "C:\Windows\Temp\KB1234567.msu"。若返回进程名,证明该文件正被某个程序锁定——常见于杀毒软件实时扫描、OneDrive同步、或后台 Windows Update 服务自身未释放句柄。
强制终止占用进程并删除文件
第一步:在管理员 PowerShell 中运行 taskkill /f /im msedge.exe → taskkill /f /im chrome.exe → taskkill /f /im explorer.exe。Edge 和 Chrome 常静默加载 .msu 文件元数据,Explorer 则可能持有临时目录句柄。
第二步:重启 Windows 资源管理器。按 Ctrl+Shift+Esc 打开任务管理器 → 右键「Windows 资源管理器」→「重新启动」。这步比单纯 kill 更稳妥,能重置 shell 层级的文件锁。
第三步:立即执行删除。不要等系统缓存刷新,直接在资源管理器地址栏输入 %windir%\Temp 回车 → 找到对应 .msu 或 .cab 文件 → 按住 Shift 键再按 Delete 彻底绕过回收站删除。普通 Delete 仍可能触发权限校验而失败。
清空更新缓存目录并重置服务
管理员 PowerShell 中逐行执行:
net stop wuauserv → net stop cryptsvc → net stop bits → net stop msiserver
进入 C:\Windows\SoftwareDistribution,将整个文件夹重命名为 SoftwareDistribution.old。这一步不可跳过,因为 0x80070050 很可能源于旧缓存中残留的同名文件索引冲突。
执行 net start wuauserv → net start cryptsvc → net start bits → net start msiserver。服务全部启动后,必须重启电脑,否则 Windows Update 组件仍会读取内存中旧的缓存映射表。











