Composer install报“Access is denied”且无具体路径,基本非权限不足,而是杀软(如Defender、火绒、360)静默拦截vendor/bin/*.bat生成;应临时禁用实时防护(尤其云查杀)、改用Git Bash运行或加--no-scripts参数跳过脚本生成。

Composer install 报 “Access is denied” 且无具体路径
这基本不是权限不足,而是 Windows 杀软(尤其是 Windows Defender 实时防护、火绒、360 等)在解压后生成 vendor/bin/phpunit.bat 或类似批处理文件时,静默拦截了 .bat 文件落地。错误不带路径、不提权限位、只说 Access is denied,就是典型信号。
别急着加管理员运行 CMD/PowerShell——那会让 vendor/ 下混入 root 所有子目录,后续更难清理。
- 临时禁用实时防护(重点关掉“云查杀”“行为监控”类功能,仅禁用“病毒扫描”可能无效)
- 右键杀软图标 → “暂停保护”或“退出”,再跑一次
composer install - 若用 Windows Terminal + WSL2,根本别指望它执行 Windows 的 .bat;直接切到 Git Bash 再试
改用 Git Bash 绕过 .bat 权限模型
Git Bash 不走 Windows 批处理执行链,Composer 会把 vendor/bin/* 生成为 shell wrapper(#!/usr/bin/env sh 开头),完全避开 UAC 和杀软对 .bat/.exe 的拦截逻辑。
- 确保已安装 Git for Windows(含 Git Bash)
- 在项目根目录右键 → “Git Bash Here”
- 运行
composer install,观察是否跳过报错 - 注意:
php命令需在 Git Bash 中可用(PATH 里有 PHP 目录,或用/c/php/php82/php.exe绝对路径)
必须用 PowerShell?跳过脚本生成环节
如果团队规范强制用 PowerShell,又无法临时关杀软,最稳妥的方案是绕开 .bat 生成本身:
- 加
--no-scripts参数:composer install --no-scripts - 该参数跳过所有
post-install-cmd和post-autoload-dump,也跳过vendor/bin/脚本生成 - 后续需手动触发 autoload:
php vendor/autoload.php或直接调用php vendor/bin/phpunit(PHP 直接执行,不依赖 .bat) - 注意:
--no-scripts不影响依赖下载和vendor/解压,只是省掉“包装层”
杀软放行但依然失败?检查文件句柄锁定
某些安全软件(如卡巴斯基、腾讯电脑管家)会在文件写入后立即扫描并短暂锁定句柄,导致 Composer 后续 rename 或 chmod 失败。
- 打开任务管理器 → “性能”页 → “打开资源监视器” → “CPU”页 → 搜索
composer或php - 看是否有进程正占用
vendor/下刚解压的文件(状态显示“正在使用”) - 结束对应杀软的扫描进程(如
klifw.exe、Tencentdl.exe),再重试 - 长期方案:将项目目录添加到杀软的“信任区”或“排除项”,而非全局关防护
真正麻烦的不是报错本身,而是杀软拦截往往不记日志、不弹提示、不释放句柄——它让你以为是 Composer 或 PHP 的问题,实际连文件系统都没真正写进去。


















