已經打包拿到客戶那的 Electron 應用程式 , 如果有 BUG 需要更新時該怎麼辦呢 ?
一般的做法 , 請客戶解安裝之前的版本 , 並手動安裝最新的版本 ,
如果這個應用程式有 10 個版本 , 那客戶可能會安裝到很煩 (至少本魯會很煩)
今天討論一下 , Electron 應用程式的更新那回事 , 以利明天討論 自動化更新
在 Day 6 利用 electron-builder 打包應用程式時 ,
我們有提到在 Windows 平台上可以打包成 NSIS 應用與 Portal 應用兩種類型
類型 | 功能特點 |
---|---|
Portal | 綠色檔案 , 啟動 exe 即可使用 |
NSIS | 安裝檔 , 安裝後才能使用 |
下方解說一下 , 此 2 種應用在手動更新時需要執行哪些步驟 ?
如果你是 Portal 版的程式 , 只要下載新的 exe , 並覆蓋掉舊的應用程式 , 就算完成更新了 !
當你用 electron-builder 生成一個 windows 安裝檔時 , 那個安裝檔就是 NSIS 版本
使用 electron-builder 產出的 NSIS 安裝檔 , 他具體的安裝步驟如下
因此如果你要更新應用程式 , 你只要拿到新版的 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);
})
}
今年小弟第一次參加 `鐵人賽` , 如文章有誤 , 請各位前輩提出指正 , 感謝 <(_ _)>