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

相关链接

相关推荐
CodeSheep程序羊8 分钟前
吴恩达官宣开源,yyds!
java·javascript·人工智能·python·深度学习·神经网络·github
Yan.love2 小时前
网络请求的进化之旅【从表单到Axios】
前端·网络·ajax
iReachers4 小时前
WebView2与Chrome内核的区别和使用场景详细介绍
前端·chrome·webview2
困顿小狗6 小时前
vue2 项目webpack 4升5
前端·webpack
sleeppingfrog6 小时前
vue3中自定义组件的双向绑定
前端·javascript·vue.js
Domain-zhuo6 小时前
uniapp 应用的生命周期、页面的生命周期、组件的生命周期
前端·javascript·vue.js·前端框架·uni-app·html·ecmascript
旅行中的伊蕾娜6 小时前
uniapp炫酷导航按钮及轮播指示器组件
前端·javascript·vue.js·微信小程序·uni-app
Liberty_yes6 小时前
uniapp navigateTo、redirectTo、reLaunch等页面路由跳转方法的区别
前端·uni-app
cy玩具6 小时前
Vuex在uniapp中的使用
开发语言·javascript·ecmascript
TWenYuan6 小时前
vue响应式数据-修改对象的属性值,视图不更新
前端·javascript·vue.js