必须将update.mode设为"none"才能真正禁用自动更新,因"manual"仍会静默下载并弹窗;还需关闭Windows后台更新、扩展autoUpdate与autoCheckUpdates,并锁定product.json权限以防重置。

update.mode 必须设为 "none",否则所谓“关闭”只是隐藏提示,不是真正禁用
为什么改了 update.mode 还会弹更新气泡
因为 VSCode 的更新机制分两层:检查行为(是否联网查新版本)和提示行为(是否弹窗/右下角气泡)。设成 "manual" 仍会静默下载安装包并弹“重启以更新”;只有 "none" 才同时停掉检查和提示。
Windows 用户额外注意:update.enableWindowsBackgroundUpdates 必须显式设为 false,否则系统级 update.exe 服务不受 settings.json 控制,会在后台拉取更新包。
扩展还在自动升级?那是另一套开关
主程序更新和扩展更新完全解耦。关掉 update.mode 对插件毫无影响。必须同步设置:
-
"extensions.autoUpdate": false—— 禁止自动安装新版本 -
"extensions.autoCheckUpdates": false—— 禁止后台轮询更新列表
这两项若漏掉任意一个,插件可能在你深夜保存代码时突然升级,接着报 Extension host terminated unexpectedly。
工作区或远程配置可能悄悄覆盖你的设置
VSCode 配置优先级是:Workspace > Remote > User > Default。常见陷阱:
- 项目根目录有
.vscode/settings.json,里面写了"update.mode": "default",那用户级的"none"就失效 - 用了 Remote-SSH 或 Dev Container,左下角显示「Remote — SSH」,就得点它 → 「Open Remote Settings」单独配一遍
- 执行
Developer: Open Logs Folder,打开main.log搜updateService,确认实际生效的是哪一级配置
product.json 文件权限不锁死,升级后设置就丢
VSCode 每次大版本手动升级,都会重写安装目录下的 product.json,把你加的 "updateMode": "none" 和 "extensionsAutoUpdate": false 清空。这不是 bug,是设计如此。
必须做完两件事:
- 编辑对应路径的
product.json(Windows:%LOCALAPPDATA%\Programs\Microsoft VS Code\resources\app\product.json;macOS:/Applications/Visual Studio Code.app/Contents/Resources/app/product.json;Linux:/usr/share/code/resources/app/product.json) - 保存后立刻设为只读:Windows 右键属性勾选「只读」;Linux 执行
sudo chattr +i product.json;macOS 用chmod 444 product.json
没做这步,下次升级完你会发现右下角气泡又回来了。











