pub get报EACCES或静默失败根本不是Dart问题,而是pub_cache目录被设为只读、归属异常或被dart.exe等进程锁住,需检查NTFS写权限、结束残留进程并禁用VSCode管理员启动。

pub get 报 EACCES 或静默失败,根本不是 Dart 问题
VSCode 运行 pub get 失败时弹出 EACCES: permission denied,或命令卡住无输出,90% 和 Dart SDK 本身无关,而是 pub_cache 目录(如 C:\Users\rondos\AppData\Local\Pub\Cache)被系统标记为只读、归属异常,或正被其他进程锁住。VSCode 的终端只是执行环境,真正拦住写入的是 Windows NTFS 权限或文件句柄占用。
检查并修复 pub_cache 目录的 NTFS 写权限
Windows 下 pub_cache 默认位于用户目录,但若曾用管理员运行过 VSCode 或 dart 命令,该目录可能被设为只读,或安全策略里移除了当前用户的“写入”权限:
- 右键
C:\Users\rondos\AppData\Local\Pub\Cache→ “属性” → “常规”选项卡 → 取消勾选“只读” → 点“应用” - 切到“安全”选项卡 → 选中你的用户名 → 点“编辑” → 勾选“写入”和“修改” → 确认保存
- 若“安全”选项卡灰掉,说明继承被禁用:点“高级” → 勾选“替换子容器和对象的所有者” → 应用
- 别直接给
Everyone加权限——这会破坏隔离性,且部分杀软会拦截
终止占用 pub_cache 的 dart.exe 和 flutter.bat 进程
pub get 失败常因缓存目录正被 dart 进程独占锁定,尤其在 VSCode 突然关闭、热重载中断后残留句柄:
- 打开任务管理器 → “详细信息”页 → 按名称排序 → 结束所有
dart.exe、flutter.bat、pub.bat - 命令行快速清理:
taskkill /f /im dart.exe、taskkill /f /im flutter.bat - 若提示“拒绝访问”,说明这些进程是以管理员身份启动的 → 右键任务管理器 → “以管理员身份运行”,再执行上述命令
- 重启 VSCode,不要复用旧终端,新开一个集成终端再试
pub get
避免未来复发:不以管理员身份启动 VSCode
一旦你右键 VSCode 图标选过“以管理员身份运行”,它可能记住这个行为,后续所有窗口都尝试用高权限写入用户目录,导致权限错乱:
- 关闭所有 VSCode 实例
- 右键 VSCode 快捷方式 → “属性” → “兼容性”选项卡 → 确保“以管理员身份运行此程序”未勾选
- 同样检查原始安装路径下的
Code.exe(如C:\Users\XXX\AppData\Local\Programs\Microsoft VS Code\Code.exe)的兼容性设置 - 在任务管理器中确认新启动的 VSCode 进程“提升级别”列为“应用程序”,不是“管理员”
真正容易被忽略的是进程残留和启动上下文继承——哪怕你改了目录权限,只要 dart.exe 还挂着,或者 VSCode 仍带着管理员令牌,pub get 就会继续失败。


















