只设"update.mode":"none"不够,因它不阻止后台下载、不影响扩展更新、也拦不住windows的update.exe服务;需同步禁用update.enablewindowsbackgroundupdates、远程配置、扩展自动检查与安装,并加固product.json及系统级更新进程。

关掉 VSCode 自动更新,只设 update.mode 为 "none" 不够——它不阻止后台下载,也不影响扩展更新,更拦不住 Windows 的 update.exe 服务。
为什么改了 update.mode 还弹“有新版本”提示
常见原因不是设置没生效,而是配置被覆盖或机制没关全:
-
update.mode设为"none"只禁用 UI 提示,但 Windows 下update.enableWindowsBackgroundUpdates默认为true,系统级服务仍会静默拉取更新包 - 远程开发(如 Remote-SSH、Dev Container)加载的是服务端配置,用户级设置不生效;需在远程机器的
.vscode/settings.json或远程设置里同样设"update.mode": "none" - Snap 版本(Ubuntu 默认)完全无视 VSCode 内部设置,必须用
sudo snap refresh --hold锁定 - 检查
Developer: Open Logs Folder→main.log,搜索updateService,确认实际读取的是哪一级配置
主程序 + 扩展更新必须分开关
VSCode 把主程序更新和扩展更新设计成两套独立通道,关一个留一个,照样出问题:
- 主程序:设
"update.mode": "none"+ Windows 用户额外加"update.enableWindowsBackgroundUpdates": false - 扩展检查:必须同时关
"extensions.autoCheckUpdates": false和"extensions.autoUpdate": false,否则插件仍会每小时轮询、静默安装、触发Extension host terminated unexpectedly - 右下角残留通知气泡?执行
Notifications: Clear All Notifications(Ctrl+Shift+P),仅点 × 无法清空队列
防反弹:物理层加固与启动参数兜底
配置可能被大版本升级重写,或被组策略/MDM 覆盖,得加硬性防护:
- 编辑
product.json(路径见知识库),手动插入"updateMode": "none"和"extensionsAutoUpdate": false,再设为只读(Windows 属性勾选,Linux 用chattr +i) - Windows 用户进
taskschd.msc,禁用所有含VSCode或update的计划任务;任务管理器里杀掉update.exe进程 - 临时强隔离:启动时加
code --disable-updates(Windows)或code --disable-updates --no-sandbox(macOS/Linux) - 企业离线环境可配合 hosts 拦截
update.code.visualstudio.com和vscode-update.azurewebsites.net,但注意这也会断扩展市场
真正麻烦的不是找不到开关,而是你以为关完了——结果某天发现 ~/.vscode/Updater/ 目录里多出几个 vscode-update-stable-*.tmp 文件,或者远程服务器上 code-server 自己又去拉了新版。关键得盯住进程、日志、权限三层。











