使用GitHub Actions发布Electron Windows应用时遇EBUSY资源锁定错误
Electron Forge Windows发布卡在Squirrel打包阶段(EBUSY文件锁定错误)
问题详情
使用electron-forge publish发布Electron应用时,Mac和Linux平台正常,但Windows平台在执行到[STARTED] Making a squirrel distributable for win32/x64后卡住,取消工作流后出现EBUSY错误:
Fail to clean temporary files on exit : Error: EBUSY: resource busy or locked, unlink 'C:\Users\RUNNER~1\AppData\Local\Temp\si-2023319-3264-ho6ipb.02ga\electron_publish_example.1.0.16.nupkg'
已尝试npm cache clean --force,无效。
GitHub Workflows配置片段:
publish_on_win: runs-on: windows-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@master with: node-version: 14 - name: install dependencies run: npm ci - name: clean npm cache run: npm cache clean --force - name: publish env: GITHUB_TOKEN: ${{ secrets.TOKEN }} run: npm run publish
解决方案
1. 升级Node.js版本到LTS版
Node 14已停止维护,旧版本文件系统API存在Windows文件锁定兼容性问题。将GitHub Actions中的Node版本更换为16或18 LTS:
- uses: actions/setup-node@master with: node-version: 18 # 或16
2. 升级Electron Forge及Squirrel依赖
旧版本@electron-forge/maker-squirrel存在文件未正确释放的bug,执行以下命令升级依赖:
npm update @electron-forge/cli @electron-forge/maker-squirrel electron
提交修改后重新触发Workflow。
3. 禁用临时文件自动清理
通过环境变量让temp模块跳过自动清理,避免因锁定文件无法删除导致卡住:
- name: publish env: GITHUB_TOKEN: ${{ secrets.TOKEN }} CLEANUP_TEMP: "false" run: npm run publish
4. 打包前强制结束残留进程
Windows环境下可能存在残留进程锁定临时文件,在publish步骤前添加进程清理:
- name: Kill lingering processes run: | taskkill /f /im "node.exe" 2>nul || true taskkill /f /im "electron.exe" 2>nul || true
5. 更换Windows打包器
如果Squirrel问题持续,改用NSIS打包器:
- 安装依赖:
npm install @electron-forge/maker-nsis --save-dev - 修改
forge.config.js的makers配置:
module.exports = { makers: [ { name: '@electron-forge/maker-nsis', config: { // 可添加自定义NSIS配置 } } ] };
验证建议
优先尝试方案1和2,这两个是最常见的修复手段,多数情况下升级依赖和Node版本即可解决文件锁定问题。若无效,再依次尝试后续方案。
内容的提问来源于stack exchange,提问作者pstano1
相关产品推荐
相关产品推荐

