Mac 下 vscode 更新报错

前言

自从换了 Mac 之后,我就没有主动更新过 VS Code。今天本来想装个插件,结果却提示当前版本过低,必须更新后才能安装。点击 Check for Update 后,VS Code 在右下角弹出了这样一条错误提示:

Cannot update while running on a read-only volume. The application is on a read-only volume. Please move the application and try again. If you're on macOS Sierra or later, you'll need to move the application out of the Downloads directory. This might mean the application was put on quarantine by macOS. See this link for more information.

起初还以为是 VS Code 更新机制的问题,但仔细看提示,结合一些网上的搜索后,发现这个问题主要与 macOS 的权限管理有关。

问题分析

从错误提示可以看出,问题的根源在于 VS Code 被存放在了一个只读卷上,导致无法正常更新。在 macOS 上,这种情况常见于以下几种场景:

  1. 存放在默认的"下载"目录

    用户从官网下载后直接运行 VS Code,而没有将其移动到 /Applications 目录,默认情况下,"下载"目录并不具备足够的权限支持应用更新。

  2. 放置在自定义的"只读"目录

    如果用户将 VS Code 放在自定义目录(例如 ~/Applications),而非系统的 /Applications,可能会因为权限问题导致更新失败。

  3. 被 macOS 的"隔离机制"标记为只读

    从 macOS Sierra 开始,系统对从非 App Store 下载的应用默认启用"隔离"机制(quarantine),会限制应用程序的权限,包括更新权限。

综上所述,这个问题实际上源于 VS Code 的存储路径以及 macOS 的权限限制。那么,如何解决这个问题呢?

解决方法

方法 1:移动到 /Applications 目录

手动将 VS Code 移动到根目录下的 /Applications 文件夹,这是 macOS 上的标准应用存储位置,拥有更新所需的权限。操作步骤如下:

  1. 打开 Finder,找到 Visual Studio Code.app。
  2. 拖动该文件到 /Applications 目录下(如果系统提示输入管理员密码,输入即可)。

完成后,重新打开 VS Code 并尝试更新。如果问题解决,那么恭喜你,这种方法最简单有效。

方法 2:修改缓存文件权限

如果移动到 /Applications 后仍然无法解决问题,很可能是 VS Code 的更新缓存文件权限出现问题。我们需要修改这些文件的所有者为当前用户。

1. 检查缓存目录是否存在

执行以下命令,确认更新缓存目录的状态:

bash 复制代码
ls ~/Library/Caches/com.microsoft.VSCode.ShipIt
  • 如果目录存在并有内容,则继续执行下一步。
  • 如果目录内容为空,可以手动删除该目录:
bash 复制代码
rm -rf ~/Library/Caches/com.microsoft.VSCode.ShipIt

2. 修改缓存文件所有者

将缓存文件的所有者改为当前用户,以便获得修改权限:

bash 复制代码
sudo chown -R $USER ~/Library/Caches/com.microsoft.VSCode.ShipIt

3:解除应用隔离状态

有时 macOS 的隔离机制会将下载的应用标记为"受限"状态。我们需要解除隔离状态,让应用获得正常权限:

bash 复制代码
xattr -dr com.apple.quarantine /Applications/Visual\ Studio\ Code.app

注意:如果执行此命令时提示权限错误,可以尝试重启电脑后再运行。

4. 重启系统并重试更新

在完成上述操作后,如果问题仍然存在,建议重启电脑以清除 macOS 的权限缓存。重启后,重新尝试更新:

  1. 打开 VS Code。
  2. 点击菜单栏中的 Code > Check for Updates。

如果问题仍未解决,可以考虑卸载 VS Code 并重新下载最新版本。

结语

出现这个问题的原因在于 VS Code 存储目录的权限不足,这主要是因为它是一个无需安装即可运行的应用。用户在首次使用时通常不会关注存储路径,导致更新时权限不足。通过移动目录、修改权限、解除隔离状态等方法,我们可以解决这个问题。

相关链接

相关推荐
努力变的更好21 小时前
H5与小程序之间的回调
前端·小程序·apache
Non-existent98721 小时前
在 WPS/Excel 里做地理数据处理:功能市场 + 奥维 / Google Earth / QGIS 三种跳转实战
开发语言·javascript·ecmascript
zhougl99621 小时前
什么是 URL
javascript
汤米粥21 小时前
目前流行的前端 CSS 框架
前端·css·bootstrap·ant design·‌tailwind css·bulma
砚凝霜21 小时前
CTF Misc 签到 GXUST·CTF:查看源码 + HTML 注释 + Base64 解码(附 Base64 原理)
前端·html
徐小夕21 小时前
扒了JitWord的源码,我终于搞懂了企业级在线Word到底有多难写
前端·vue.js·github
lily52278321 小时前
工具池与分发
前端·chrome
徐小夕@趣谈前端1 天前
老旧Word格式全支持!JitWord协同AI文档4.1,让Word文档无缝迁移到Web端
前端·人工智能·word
螺丝钉tina1 天前
[Playwright][01] 从 Puppeteer 到 Playwright:为什么选择 Playwright + TypeScript?
前端·javascript·typescript
大团米线1 天前
vite多环境合并打包config
javascript·vue.js·ecmascript