VSCode离线安装卡在99%实为.extensions-tmp写入失败,主因是杀软拦截、权限不足或进程残留占用,需完全退出VSCode后删除该临时目录并确认父目录可写。

VSCode离线安装卡在99%:其实是 .extensions-tmp 写入失败
离线安装插件时进度条停在99%,不是网络慢,也不是文件没下完,而是 VSCode 解压 .vsix 后试图写入临时目录 .extensions-tmp 时被拦截了。这个目录是解压中转站,一旦被杀软、权限策略或残留进程锁住,VSCode 就静默挂起——不报错、不重试、也不提示。
- Windows 路径:
%USERPROFILE%\.vscode\.extensions-tmp - macOS/Linux 路径:
~/.vscode/.extensions-tmp - 必须完全退出 VSCode(包括托盘图标右键“Quit”)后再删,否则它会复用损坏的缓存继续卡住
- 删完别急着启动,先检查该路径父目录(
~/.vscode或%USERPROFILE%\.vscode)是否可写:ls -ld ~/.vscode(Linux/macOS)或icacls "%USERPROFILE%\.vscode"(Windows)
为什么删了 .extensions-tmp 还是卡住?检查 umask 和 shell 上下文
VSCode 终端默认以 non-login shell 启动,不加载 ~/.zshrc 或 ~/.bash_profile 里的 umask 设置。结果新建的 .extensions-tmp 目录权限可能是 0700,其他进程(比如另一个 VSCode 实例或语言服务器)就打不开它。
- 在 VSCode 终端里运行
umask,对比系统终端输出;若不同,说明权限掩码没生效 - 临时修复:在 VSCode
settings.json中加"terminal.integrated.shellArgs": ["-l"],强制走 login shell(需重启 VSCode) - 长期方案:把
umask 0002写进~/.zshrc,并确保 VSCode 是从 Dock / 桌面快捷方式启动(而非命令行code启动)
企业环境常见干扰:OneDrive、Defender 或组策略重定向 %TEMP%
Windows 下 %TEMP% 常被重定向到 OneDrive 同步目录或受保护的 Packages\ 子路径,而 VSCode(尤其非管理员运行时)无法写入这些位置——.extensions-tmp 创建失败,直接导致安装中断。
- 查真实路径:
echo %TEMP%(CMD)或$env:TEMP(PowerShell) - 若路径落在
%USERPROFILE%\OneDrive\或\Packages\下,大概率被拦截 - 临时绕过:在安装前执行
set TEMP=%USERPROFILE%\temp & mkdir %TEMP%(CMD),再拖 .vsix 文件 - 检查 Windows 安全中心 → “应用控制” → “勒索软件防护”是否锁定了该路径
杀软/EDR 拦截的典型表现和验证方式
某些国产安全软件或企业级 EDR 会 hook 进程,对 .vsix 解压行为做深度扫描,导致 .extensions-tmp 创建后立即被锁定或删除,VSCode 却无感知。
- 现象:删完
.extensions-tmp启动 VSCode,刚拖入 .vsix 就又自动生成空目录,且无法写入任何文件 - 验证:任务管理器里观察
Code Helper (Renderer)进程 CPU 是否突增后停滞 - 临时关闭杀软后重试;若恢复,则需在杀软白名单中添加
code.exe及其子进程 - 别依赖“信任此文件”类弹窗——VSCode 的临时目录写入是后台行为,这类弹窗根本不会触发
.extensions-tmp 目录是否存在、是否为空、是否能被当前用户创建文件。


















