最常见的更新失败原因是网络拦截或组策略限制,需通过curl验证连接、检查msiexec进程、禁用杀毒软件,并查看main.log日志定位真实错误。

检查更新时提示“无法连接到更新服务器”
这是最常见的现象,VSCode 尝试通过 update.code.visualstudio.com 获取更新元数据,但被代理、防火墙或本地网络策略拦截。Windows 上还可能因企业组策略禁用自动更新而静默失败,不报错但也不弹窗。
验证方式:在终端中手动执行以下命令,看是否能获取响应:
curl -I https://update.code.visualstudio.com/api/update/win32-x64/stable
若返回 403 或超时,说明网络层已阻断。此时不要依赖 GUI 的「检查更新」菜单,它不会显示底层错误细节。
- 临时绕过代理:启动 VSCode 时加参数
--proxy-server="" - 跳过证书验证(仅测试环境):
--ignore-certificate-errors - 企业用户需确认组策略路径:
计算机配置 → 管理模板 → Windows 组件 → 应用程序兼容性 → 关闭 Windows 更新是否误启
下载新版本安装包后卡在“正在安装…”且无进度
VSCode 更新本质是下载一个完整的新安装包(如 VSCodeUserSetup-x64-1.90.0.exe),再调用系统 installer 静默升级。卡住通常不是 VSCode 自身问题,而是 Windows Installer 服务异常或权限不足。
关键线索:打开任务管理器,观察是否有 msiexec.exe 进程持续占用 CPU 或挂起;或查看 %TEMP%\vscode-updater\ 目录下是否有未完成的 .exe 文件。
- 手动清理残留:
任务管理器 → 结束所有 msiexec.exe 进程,再删掉%TEMP%\vscode-updater\全部内容 - 以管理员身份运行已下载的安装包(路径通常为
%USERPROFILE%\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\code\electron-sandbox\workbench\vscode-updater\下的 .exe) - 禁用杀毒软件实时防护(尤其 Windows Defender 的“基于信誉的保护”常误拦静默安装)
更新后启动崩溃或界面白屏
这多发生在从旧版(如 1.7x)跨大版本升到 1.9x 后,核心原因是扩展兼容性断裂或用户数据目录损坏。VSCode 不会自动迁移旧版插件缓存,而新 Electron 内核对某些原生模块(如 node-gyp 编译的扩展)要求更高。
先排除扩展干扰:启动时加 --disable-extensions 参数。如果此时能正常打开,就确认是扩展引发的问题。
- 重置扩展状态:关闭 VSCode,重命名
%USERPROFILE%\.vscode\extensions为extensions.bak,再启动 - 强制重建缓存:删除
%USERPROFILE%\AppData\Roaming\Code\Cache和%USERPROFILE%\AppData\Roaming\Code\CachedData - 避免混合使用便携版与安装版——两者共用
%APPDATA%会导致配置冲突,尤其在更新后
想彻底禁用自动更新但保留手动触发能力
VSCode 没有全局“关闭更新”开关,但可通过配置让自动检查失效,同时保留菜单里的「检查更新」可用。关键是区分两个机制:后台静默检查(由 update.mode 控制)和用户主动触发(不受该设置影响)。
修改 settings.json 即可:
"update.mode": "none"
这样 VSCode 不再每 12 小时轮询服务器,也不会弹出更新提示,但你仍可通过 Ctrl+Shift+P → “Developer: Check for Updates” 手动检查。注意不要设成 "update.mode": "manual"——它等价于 "none",且文档已标记为废弃。
若连手动检查也想屏蔽(比如离线环境),可配合 hosts 屏蔽:127.0.0.1 update.code.visualstudio.com。但记得更新后及时注释掉,否则后续真要更新时会完全失联。
最易被忽略的是:更新失败日志藏在 %USERPROFILE%\AppData\Roaming\Code\logs\ 下的最新 main.log 里,里面会有类似 update#checkForUpdates error [Error: getaddrinfo ENOTFOUND update.code.visualstudio.com] 的真实线索,比 UI 提示有用得多。









