vscode 完全禁用更新需同时关闭三层机制:settings.json 中设 "update.mode": "none"、product.json 中设 "updatemode": "none" 并设只读、系统级服务(如 windows 的 update.exe 或 snap 自动刷新)也须禁用,插件更新还需单独关 extensions.autoupdate 和 autocheckupdates。

VSCode 启动时不自动更新,只靠改 settings.json 里的 update.mode 是不够的——它能拦住弹窗和重启升级,但拦不住后台静默下载、计划任务唤醒、甚至 product.json 被重写后“复活”更新逻辑。
必须同时禁用主程序三层更新通道
VSCode 的更新行为由三套独立机制驱动,缺一不可:
-
update.mode(用户设置层):控制是否提示、是否自动重启。设为"none"是基础,但仅影响 UI 和生命周期管理 -
updateMode(安装包层,写在product.json):决定 VSCode 启动时是否初始化更新服务。若这里仍是"default",首次启动就会联网检查,且可能覆盖你设好的settings.json - 系统级后台服务(Windows 的
update.exe、macOS 的 launchd 守护进程、Linux snap 的自动刷新):它们不读你的配置,只按系统策略运行。Windows 用户尤其要注意update.enableWindowsBackgroundUpdates必须显式关掉,否则update.exe会绕过所有设置拉包
插件更新必须单独关,和主程序完全无关
很多人关了 update.mode,结果第二天发现 Python 插件升到 v2026.9.1,Prettier 报 Extension host terminated unexpectedly ——这是因为插件更新走的是另一套开关:
-
extensions.autoUpdate:控制是否自动安装新版本(设为false或"none") -
extensions.autoCheckUpdates:控制是否发起 HTTP 请求轮询 Marketplace(漏掉这个,右下角仍会弹 “Update available”) - 项目级配置优先级更高:
.vscode/settings.json若存在且含"extensions.autoUpdate": true,会直接覆盖你用户级的设置 - 某些插件(如
GitLens)自带通知逻辑,还需额外配"gitlens.advanced.messages": []才能关掉弹窗
安装后立即加固,否则首次启动就失效
VSCode 在首次启动时会强制读取并可能重写关键文件,等你进 Settings 界面再改,已经晚了:
- Windows 路径:
%LOCALAPPDATA%\Programs\Microsoft VS Code\resources\app\product.json,手动加字段:"updateMode": "none", "extensionsAutoUpdate": false,然后右键 → 属性 → 勾选“只读” - 对应用户配置:
%APPDATA%\Code\User\settings.json,确保包含:"update.mode": "none", "update.enableWindowsBackgroundUpdates": false, "extensions.autoUpdate": false, "extensions.autoCheckUpdates": false - Mac/Linux 类似,但
product.json在/Applications/Visual Studio Code.app/Contents/Resources/app/或/usr/share/code/resources/app/下,需sudo编辑 - Snap 安装版必须执行:
sudo snap refresh --hold vscode,否则 snapd 每天凌晨自动刷版本
验证是否真关干净
改完别急着关,立刻做这几件事确认没漏网:
- 点
Help > Check for Updates:菜单项应变灰,点击无响应 - 右下角状态栏不出现气泡;若显示
Remote — SSH,点它 →Open Remote Settings→ 再查一遍update.mode - 任务管理器搜
update.exe(Win)或终端跑ps aux | grep update(Mac/Linux),确认无残留进程 - Windows 运行
taskschd.msc,删掉所有含VSCode或Squirrel的计划任务
最常被忽略的是:每次手动升级 VSCode 后,product.json 和 settings.json 都会被重置,且远程开发环境的服务端配置不会同步你的本地设置——这意味着你关了一次,不等于永远安静。











