必须将update.mode设为"none"才能彻底禁用VSCode更新,因"manual"仍会静默下载并弹“重启”气泡;还需同步关闭Windows后台更新、插件autoCheckUpdates与autoUpdate,并检查远程及工作区配置覆盖。

update.mode 必须设为 "none",否则 VSCode 仍会静默下载安装包、弹气泡、甚至强制重启——这不是“不提醒”,而是“不检查也不装”的唯一有效值。
为什么 update.mode 设成 "manual" 还会弹窗
VSCode 的更新行为分两层:update.mode 控制是否检查+提示,update.enableWindowsBackgroundUpdates(Windows)或系统级进程(macOS/Linux)控制是否后台拉包。"manual" 仅推迟重启,但依然会静默下载并弹出“重启以更新”;只有 "none" 才同时禁用检查、下载和 UI 提示。
-
update.mode在用户settings.json中必须显式写为"none",不能留空或依赖 GUI 下拉菜单默认值 - Windows 用户必须同步设
"update.enableWindowsBackgroundUpdates": false,否则update.exe进程仍每小时唤醒、联网拉取新版本 - macOS 用户建议补上
"update.showReleaseNotes": false,避免每次启动弹 changelog 页面 - 改完无需重启 VSCode,立即点击
Help > Check for Updates验证:菜单项应变灰且无响应
插件还在自动升级?那是另一套开关没关
主程序更新和插件更新完全解耦。update.mode 对扩展毫无影响。右下角出现 “Update available” 或调试中报 Extension host terminated unexpectedly,大概率是插件在你不知情时升级了。
- 必须同时关闭两个布尔值:
"extensions.autoUpdate": false(禁止安装)和"extensions.autoCheckUpdates": false(禁止 HTTP 轮询) - 漏掉
autoCheckUpdates,插件仍每小时发请求,占带宽、卡 Extension Host、触发气泡 - GUI 设置有时不同步,尤其启用了 Settings Sync 或团队模板时,务必打开
settings.json确认这两行真实存在 - 工作区
.vscode/settings.json优先级高于用户设置,若其中含"extensions.autoUpdate": true,全局配置直接失效
改完又弹窗?大概率是配置被覆盖或重置了
VSCode 大版本手动升级后,常会重写 %APPDATA%\Code\User\settings.json(Windows)或 ~/Library/Application Support/Code/User/settings.json(macOS),把你加的 "none" 悄悄还原成 "default"。product.json 同样会被覆盖,且更难察觉。
- 给用户
settings.json设为只读:Windows 右键 → 属性 → 勾选「只读」;macOS/Linux 执行chmod 444 settings.json - 远程开发环境(如 Remote-SSH、Dev Container)有独立配置层,左下角显示
Remote — SSH时,必须点它 →Open Remote Settings单独配一遍update.mode和插件开关 - 某些插件(如
gitlens)绕过通用通知机制,需单独设"gitlens.advanced.messages": []才能禁掉右下角弹窗 - 执行
Developer: Open Logs Folder,打开main.log搜索updateService,确认生效的是哪一级配置
settings.json 和 product.json 都可能被重写,而远程开发环境的服务端配置几乎从不被主动检查。


















