安装过程中无法通过settings.json禁用自动更新,必须在安装前用--disable-updates参数或安装后立即编辑product.json(设"updatemode":"none"并只读)和settings.json(配全update.mode、extensions.autoupdate等字段)才能生效。

安装过程中无法通过 settings.json 禁用自动更新——那时 VSCode 还没启动,配置文件尚未加载。真正起效的只有安装前预设或安装后立即加固两种方式。
安装前:用命令行参数跳过所有更新检查
VSCode 安装器(尤其是 Windows 的 vscode-win32-x64-user.exe 或 macOS 的 Visual Studio Code.app)本身不提供“禁用更新”勾选项,但你可以绕过默认行为:
- Windows 用户下载安装包后,**不要双击运行**,而是右键 →「属性」→「安全」→ 确保当前用户有写入权限(否则后续加固会失败)
- 在终端中执行带参数的安装命令:
vscode-win32-x64-user.exe --disable-updates(仅对本次安装过程生效,不影响后续首次启动) - macOS/Linux 用户解压后,首次启动时加参数:
code --disable-updates --no-sandbox,可阻止首次运行时的 updateService 初始化
安装后:立刻封锁 product.json 和 settings.json
安装完成、首次启动前,必须立刻编辑两个关键文件,否则 VSCode 会在初始化阶段联网检查并写入默认值:
-
product.json路径(Windows):%LOCALAPPDATA%\Programs\Microsoft VS Code\resources\app\product.json,添加字段:"updateMode": "none", "extensionsAutoUpdate": false,保存后设为只读 -
settings.json路径(Windows):%APPDATA%\Code\User\settings.json,确保已存在且含以下内容:"update.mode": "none", "update.enableWindowsBackgroundUpdates": false, "extensions.autoUpdate": false, "extensions.autoCheckUpdates": false - Linux/macOS 类似,但注意
product.json在/usr/share/code/resources/app/或/Applications/Visual Studio Code.app/Contents/Resources/app/下,需sudo编辑
为什么“安装时禁用”本质是骗不过 VSCode 的初始化逻辑
VSCode 启动流程中,electron-main/app.ts 会在加载任何用户配置前就调用 shouldCheckForUpdates(),而该函数优先读取 product.json 中的 updateMode 字段。如果这个字段不存在或为 "default",它就会启用后台检查——哪怕你之后手动改了 settings.json,第一次启动的日志里已经留下 updateService: checking for updates... 记录。
- 常见误操作:先点开 VSCode → 等它弹“欢迎页”和“检查更新”气泡 → 再去改设置 → 结果发现
main.log里已有两次 HTTP 请求记录 - 真正安全的操作顺序是:安装完成 → 关闭所有 VSCode 进程 → 编辑
product.json并设只读 → 再启动 - Snap/Flatpak 用户跳过这步也没用:
sudo snap refresh --hold vscode才是唯一有效手段,因为 Snap 的更新完全脱离 VSCode 内部配置
企业批量部署时最可靠的方案
如果你要给几十台机器统一安装锁定版本的 VSCode,靠手动改文件不现实:
- Windows:用 PowerShell 打包安装脚本,自动下载指定版本(如
1.89.0),解压后直接注入product.json并设只读,再静默注册为默认编辑器 - macOS:用
pkgbuild制作自定义安装包,把预改好的product.json和settings.json嵌入资源目录 - Linux:用 Ansible 模块
community.general.archive解压 tar.gz 后,用copy模块覆盖product.json,再用file模块设mode: '0444'
真正麻烦的不是找不到开关,而是 VSCode 在启动第一秒就决定了要不要联网——等你看到窗口,它已经做完检查了。











