GitHub Actions上传Windows编译C程序工件遇EACCES权限错误求助
问题原因及解决方案
原因分析
这个权限错误通常由以下几种情况导致:
- msys2编译生成的
soft.exe继承了msys2环境的POSIX权限映射,在Windows原生环境下,GitHub Actions的运行用户没有足够的读取/访问权限。 - 编译完成后,
soft.exe可能被编译进程或相关后台进程锁定,导致无法被读取。 - 路径格式(反斜杠)在GitHub Actions的文件解析逻辑中可能引发权限检查异常。
解决方案
以下是几种可行的解决方法,按优先级尝试:
1. 直接修改文件权限
在上传工件前添加步骤,给目标文件赋予完全控制权限:
- name: Grant permissions to executable run: icacls "D:\a\softbochs\softbochs\build\soft.exe" /grant Everyone:F /T
或者使用PowerShell命令更精细地设置权限:
- name: Fix file permissions via PowerShell run: | $targetFile = "D:\a\softbochs\softbochs\build\soft.exe" $acl = Get-Acl $targetFile $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule( "NT AUTHORITY\Authenticated Users", "FullControl", "Allow" ) $acl.SetAccessRule($accessRule) Set-Acl $targetFile $acl
2. 清理残留进程
如果文件被编译进程锁定,先尝试终止相关进程:
- name: Terminate leftover processes run: taskkill /f /im soft.exe 2>nul || echo No running soft.exe process found
3. 调整路径格式
将YAML中的路径改为正斜杠格式或相对路径,避免反斜杠可能带来的解析问题:
- name: Upload artifact uses: actions/upload-artifact@v4.3.1 with: name: softbochs path: D:/a/softbochs/softbochs/build/
或者使用相对路径(如果当前工作目录是仓库根目录):
- name: Upload artifact uses: actions/upload-artifact@v4.3.1 with: name: softbochs path: ./build/
4. 复制文件到新目录后上传
复制文件到一个新目录,重置文件权限后再上传:
- name: Prepare artifact for upload run: | mkdir -p ./upload_dir copy "D:\a\softbochs\softbochs\build\soft.exe" ./upload_dir/ - name: Upload artifact uses: actions/upload-artifact@v4.3.1 with: name: softbochs path: ./upload_dir/
内容的提问来源于stack exchange,提问作者marc
相关产品推荐
相关产品推荐

