必须在VSCode安装时取消勾选“Enable Windows Background Updates”,否则会注册计划任务、写入注册表启动项并常驻update.exe进程,后续仅设update.mode为"none"无法彻底阻止后台更新。

安装时跳过 Windows 后台更新服务(关键第一步)
VSCode 安装包默认勾选「Enable Windows Background Updates」,一旦确认安装,它就会注册计划任务、写入注册表启动项,并在后台常驻 update.exe 进程——哪怕你后续把 update.mode 设为 "none",这个服务仍可能偷偷拉取安装包、生成临时文件、占用带宽。
安装过程中必须手动取消该选项:
- 运行官方
VSCodeUserSetup-x64-{version}.exe时,在「Custom Setup」页面(不是最后一步),取消勾选 Enable Windows Background Updates - 若已勾选并完成安装,不能仅靠设置关闭:必须进
taskschd.msc禁用所有含VSCode或update的任务,并清理注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run中值为Code.exe --no-sandbox --processStart "update.exe"的条目
避开 Snap/Flatpak 安装渠道(Linux 用户必看)
Snap 和 Flatpak 版本的 VSCode 由系统包管理器统一控制更新,settings.json 或 product.json 里的任何禁用配置都无效。它们会无视你的 update.mode 设置,定期强制刷新到最新版。
想彻底绕过后台更新服务,就别用这些打包格式:
- Linux 用户应下载官网提供的
.tar.gz版本,解压后直接运行./code,更新行为完全由你控制 - 若已安装 Snap 版,执行
sudo snap refresh --hold vscode可暂停更新,但只是临时压制;长期方案仍是切换到 tarball 版 - Flatpak 用户同理,改用
flatpak override --user --env=UPDATE_DISABLED=1 com.visualstudio.code效果有限,且不保证兼容性
macOS 安装后立即锁定 product.json(防重写)
macOS 上 VSCode 不通过系统服务更新,但每次手动升级(比如双击 dmg 安装新版本)都会覆盖 Contents/Resources/app/product.json,把你之前加的 "updateMode": "none" 字段清空——这导致你以为关了,其实没关。
安装完新版本后,必须立刻加固:
- 右键 VSCode 应用 → 「显示包内容」→ 进入
Contents/Resources/app/product.json - 用文本编辑器打开,在顶层 JSON 对象内添加两行(注意逗号分隔):
"updateMode": "none","extensionsAutoUpdate": false - 保存后执行:
chmod 444 Contents/Resources/app/product.json(设为只读,防止下次升级再被覆盖)
为什么“安装时不勾选”比“装完再关”更可靠
后台更新服务不是纯软件开关,它是注册表项 + 计划任务 + 进程守护三位一体。装完再关,相当于先放狼进屋,再挨个找门锁——容易漏掉残留的 update.exe 子进程或隐藏的触发器。
而安装时跳过,等于从源头拒绝它落脚:
- 不会创建
SquirrelMachineTasks类型的计划任务 - 不会向
Run注册表写入自动启动命令 - 不会在
%LOCALAPPDATA%\Programs\Microsoft VS Code\Update.exe生成可执行体 - 后续只需专注关插件更新和加固
settings.json,不用反复扫尾
真正麻烦的从来不是怎么关,而是关完发现某个角落还在联网——那八成是安装时没挡住第一道门。


















