electron 热更新

前言

electron 热更新的本质就是替换asar文件,通过这种方式 比全量更新更快(几十倍)。

存在问题

windows下无权替换

在windows下,但凡安装到 C://Program Files 目录中的程序,要想通过代码去写入 【都需要管理员的权限 既提权(UAC 弹窗)】,所以我们只需要应用默认安装路径改为非此路径即可:比如用当前的用户目录,甚至 C 盘根目录就行,否则需要安装提权。

mas 在无权写入

在主进程下载文件并写入到本地的时候报错

[Error: EPERM: operation not permitted, open '/Users/dsh/Library/Containers/com.dsh.demo/Data/Downloads/app.zip']
{
  errno: -1,
  code: 'EPERM',
  syscall: 'open',
  path: '//Users/dsh/Library/Containers/com.dsh.demo/Data/Downloads/app.zip'
}

这个错误通常是 应用沙盒(App Sandbox) 限制导致的。沙盒应用默认无法随意写入 ~/Library/Containers/com.dsh.demo/Data/Downloads 之外的目录,甚至在此目录内的写入权限也可能受限。Apple Store 沙盒应用 推荐使用 app.getPath('downloads') 作为下载目录 而不是如上的 app.getPath('userData') ,它是 macOS 提供的 NSDownloadsDirectory。

如果你必须非要写入 ~/Library/Containers/.../Downloads,你需要启用沙盒权限 entitlements.mas.plist

<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>com.apple.security.files.downloads.read-write</key>
<true/>

但是这个仅仅只会解决 app下载写入文件问题,但是并无法替换,会发生和上述 windows 一样的错:

  1. Mac App Store 版的 Electron 应用是“只读”的,沙盒应用 不能修改自身的 app.asar。
  2. Contents/Resources/app.asar 位于 .app 包内,而 .app 目录在 Apple Store 版本是代码签名保护的,任何修改都会导致应用损坏(通过 DMG 安装的 Electron 应用 默认不是沙盒模式,可以自由修改 .app 目录,既权限模型不同)。
posted @ 2025-03-12 10:32  丁少华  阅读(50)  评论(0)    收藏  举报