[ Day 35 ] - Electron 应用程序 - 更新自动化 ( 说明篇 )

已经打包拿到客户那的 Electron 应用程序 , 如果有 BUG 需要更新时该怎麽办呢 ?

一般的做法 , 请客户解安装之前的版本 , 并手动安装最新的版本 ,

如果这个应用程序有 10 个版本 , 那客户可能会安装到很烦 (至少本鲁会很烦)

今天讨论一下 , Electron 应用程序的更新那回事 , 以利明天讨论 自动化更新


前言 - 更新之前

Day 6 利用 electron-builder 打包应用程序时 ,
我们有提到在 Windows 平台上可以打包成 NSIS 应用与 Portal 应用两种类型

类型 功能特点
Portal 绿色档案 , 启动 exe 即可使用
NSIS 安装档 , 安装後才能使用

下方解说一下 , 此 2 种应用在手动更新时需要执行哪些步骤 ?

Portal 版本

如果你是 Portal 版的程序 , 只要下载新的 exe , 并覆盖掉旧的应用程序 , 就算完成更新了 !

NSIS 版本

当你用 electron-builder 生成一个 windows 安装档时 , 那个安装档就是 NSIS 版本

使用 electron-builder 产出的 NSIS 安装档 , 他具体的安装步骤如下

  1. 执行安装档
  2. 安装档比对 Windows 内有没有 appId 相同的 Electron 程序
  3. 如果有 appId 相同的 Electron 程序 , 执行 old-uninstaller.exe 将旧版解安装
  4. 安装目前版本的 Electron 程序 , 并将其开启

因此如果你要更新应用程序 , 你只要拿到新版的 NSIS 安装档并执行它 , 安装完成後你就可以享用更新後的应用程序了 !

下图展示拿不同版本的安装档 , 安装会有什麽样的过程

如果想自己尝试安装看看 , 下方提供 3 个 NSIS 安装档 , 让邦友玩玩看

结论

类型 手动更新方式
Portal 下载新执行档案 , 关闭并删除旧执行档案 => 更新完成
NSIS 下载新安装档 , 安装後重开应用程序 => 更新完成

备注

对於 NSIS 程序更新的流程 , 我个人抓破头脑都没想到原来这麽简单就可以处理

本鲁是观察 electron-updater 的 NsisUpdater.doInstall 区块

才知道原来更新 NSIS 应用程序 = 执行新的安装档 ( ̄  ̄|||)

如果邦友觉得 NsisUpdater.doInstall 内的程序码太杂 , 下方提供本鲁调整後的简化版

// 下方为简化版的 doInstall 函式 
const doInstall = (exe = 'installer_path', args = '["--updated"]') => {

    return new Promise((resolve, reject) => {

        const process = spawn(exe, args, {
            detached: true,  // 让执行绪与 NodeJS 脱钩
            stdio: "ignore",
        })
        process.on("error", error => reject(error))
        process.unref()

        if (process.pid) resolve(true);
    })
}

参考资料

今年小弟第一次参加 `铁人赛` , 如文章有误 , 请各位前辈提出指正 , 感谢  <(_ _)>

<<:  前端工程学习日记第18天-Emmet简易教学 - 快速上手包

>>:  [Golang]同步工具-sync包的原子操作(下)-心智图总结

错误处理

Rust将错误分成两大类 不可复原的(unrecoverable) 可复原的(recoverable...

DAY1: node.js 不专业全新手上车

第一天主要想表达以下内容: 一.我是谁? 其实我只是一个普通的大学生,我的科系不全然是资工,但也有涉...

[Day29] CI /CD with GitLab CI

credit: https://medium.com/@brilvio/how-i-impleme...

.Net Core Web Api_笔记06_HTTP资源操作模式Head

HttpHead操作是只会回传Http Header部分资讯的api请求 所以不会返回函数回传的主体...

Day 27 「能省则省」Clean Architecture ft. CQRS

大家有看过以前乡下那种烧柴的大灶吗? 图片截自爆废公社 记得以前小时候,阿公阿嬷家有这种烧柴的大灶,...