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

相关链接

相关推荐
道不尽世间的沧桑41 分钟前
第17篇:网络请求与Axios集成
开发语言·前端·javascript
diemeng11192 小时前
AI前端开发技能变革时代:效率与创新的新范式
前端·人工智能
bin91534 小时前
DeepSeek 助力 Vue 开发:打造丝滑的复制到剪贴板(Copy to Clipboard)
前端·javascript·vue.js·ecmascript·deepseek
晴空万里藏片云5 小时前
elment Table多级表头固定列后,合计行错位显示问题解决
前端·javascript·vue.js
曦月合一5 小时前
html中iframe标签 隐藏滚动条
前端·html·iframe
奶球不是球5 小时前
el-button按钮的loading状态设置
前端·javascript
kidding7235 小时前
前端VUE3的面试题
前端·typescript·compositionapi·fragment·teleport·suspense
无责任此方_修行中7 小时前
每周见闻分享:杂谈AI取代程序员
javascript·资讯
Σίσυφος19007 小时前
halcon 条形码、二维码识别、opencv识别
前端·数据库
学代码的小前端7 小时前
0基础学前端-----CSS DAY13
前端·css