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

相关链接

相关推荐
软件聚导航4 小时前
「聚小软 AI 助手」技术升级:从数据库检索到 RAG 知识库问答
前端·数据库·mysql·微信小程序·小程序·ai编程·rag
恋猫de小郭5 小时前
看懂大模型架构术语,帮助你理解目前常见的大模型开源架构
前端·人工智能·ai编程
yma165 小时前
通过提示词实现GitHub Pages 和 Nginx 双部署竟然这么简单?
前端
可乐鸡翅yeah_5 小时前
hls.js 内存泄漏实战排查,直播 M3U8 长时间播放异常定位方案
开发语言·javascript·python·django·ecmascript·m3u8·m3u8在线
前端 贾公子5 小时前
第09章:上下文与记忆 (2)
java·服务器·前端
可乐鸡翅yeah_5 小时前
第三方接口对接 M3U8 流媒体排坑实战,解决外部服务商流兼容难题
前端·javascript·python·django·html·m3u8·m3u8在线
GoppViper5 小时前
RDF资源描述框架深度解析:语义Web的数据基石与实战逻辑
前端·数据库
郑州光合科技余经理5 小时前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php
IT_陈寒5 小时前
Vue的嵌套组件竟然吃掉了我的事件?
前端·人工智能·后端
默_笙5 小时前
🏠 「LLM Notes」:我用 Next.js + Redis 给自己造了个笔记博客
前端·javascript