Lu Blog

Segment fault!

Electron 更新app.asar

开发Electron时发现app.asar无法在运行时修改,搜索了一圈,不是重新安装就是更新没打包过的单个文件,似乎没有能更新app.asar的。
研究了一下,发现通过修改底层的加载代码还是可以做到的。
app.asar在electron.asar\browser\init.js中被加载,所以只需要在调用app.asar之前加几行代码检测处理即可。

实现

// Update app.asar
const updatePack = path.join(process.resourcesPath, 'update.bin')
if (fs.existsSync(updatePack)) {
  const currentPack = path.join(process.resourcesPath, 'app.asar')
    // delete old app.asar
    fs.unlinkSync(currentPack)
    fs.renameSync(updatePack, currentPack)
}

在截图中的代码前面加上即可
electron.asarbrowserinit.js

效果

  1. Electron启动时检查有没有更新文件update.bin
  2. 如果有update.bin则删除原来的app.asar
  3. 将update.bin重命名为app.asar
  4. 回到正常启动流程

评论卡