electron-updater更新程序接入


-

electron更新程序接入需要注意每個插件的版本,不然會遇到各種各樣的問題;

我使用各個插件的版本:

"electron-builder": "^21.0.0",
 "electron-updater": "^3.0.0",
“node”: '^16.13.2',
"vue-cli-plugin-electron-builder": "^2.1.1"

這里用了electron-updater中的autoUpdater     API做的軟件更新程序;

官網地址:https://www.electron.build/auto-update

先說一下大致思路:

軟件更新,需要有一個存放新版本安裝包的服務;我采用的是用node的一個插件(http-server)啟動本地服務;

先在pakage.json中修改version版本,修改一個比較高的版本打包后放到靜態服務內;用於在本地測試,檢查到有新的安裝包,網下執行更新程序;

接下來寫更新程序:

引入autoupdater模塊:

import { autoUpdater } from 'electron-updater';

設置安裝包所在服務地址:

// 設置服務器更新地址
    autoUpdater.setFeedURL({
      provider: 'generic',
      url: http:// 192.xxx.xxx:8080
    });

設置退出時是否自動更新

 // 退出時是否自動更新 默認為true
    autoUpdater.autoInstallOnAppQuit = false;

設置是否自動更新,自動更新也就是下載好安裝包后自動觸發更新;根據自己的需求設置手否自動更新,這里設置自動更新后,就不能再手動調用更新了

 // 是否自動更新 不設置electron-updater 默認為true  手動觸發更新要設置為false
    autoUpdater.autoDownload = false

寫一個檢測的方法;剛進入程序時調用一次;然后設置一個定時器,連續檢查

// 檢查更新
  inspect() {
    autoUpdater.checkForUpdates();
  }

設置定時器用到了node-schedule插件

const schedule = require('node-schedule')
// 每隔30分鍾檢測以此 (用於正式環境)
    // schedule.scheduleJob('0 30 * * * *', () => this.inspect);
// 每隔5秒執行一次(用於本地測試)
    schedule.scheduleJob('*/5 * * * * *', this.inspect);

監聽autoupdater的幾個回到事件

// 失敗、錯誤收集
    autoUpdater.on('error', (e) => {
      // do some
    });
    // 在檢查更新是否已啟動時觸發。
    autoUpdater.on('checking-for-update', (e) => {
       // do some
    });
    // 檢測到更新可用
    autoUpdater.on('update-available', (e) => {
       // do some
    });
    // 已經是最新版
    autoUpdater.on('update-not-available', (e) => {
       // do some
    });
    // 更新下載進度事件
    autoUpdater.on('download-progress', (e) => {
      // do some
        有進度信息
    });
    // 更新下載完成事件
    autoUpdater.on('update-downloaded', (event, releaseNotes, releaseName, releaseDate, updateUrl, quitAndUpdate) => {
       // do some  會返回有版本等信息
    });

觸發 下載安裝包:

try {
      // 每次觸發下載更新包時,會在緩存目錄里存下安裝包和一個update-info.json;
      // 如果觸發了下載而沒安裝時,下次再次觸發下載,就會報錯,所以這里在每次檢查時清空一下安裝包的緩存目錄
      const updateCacheDirPath = path.join(autoUpdater.downloadedUpdateHelper.cacheDir);
      fs.emptyDir(updateCacheDirPath); // require('fs-extra')
      autoUpdater.downloadUpdate().then(() => {
        // 下載成功回調
      }).catch(e => 
        // 下載失敗回調
      )
    } catch(e) {
      // do some
    } 
手動觸發 重新啟動安裝軟件
try {
        autoUpdater.quitAndInstall()
      } catch(e) {
       // do some
      }
取消軟件下載
autoUpdater.updateCancelled()

有以上的api就可以做一個自動更新程序了

注意:最好不要再配置文件里配置軟件安裝包的服務地址,

// 新增版本信息latest.yml,便於自動更新
        publish: [
          {
            provider: 'generic',
            url: '' // 更新包地址 不建議在這里填寫  在主進程通過api填寫
          }
        ],

做的過程中走了不少彎路,主要electron-builder和electron-updater版本引起的

在本地遇到過:找不到dev-app-aupdater.yml、provider,主要是版本不一致,設置的軟件安裝包服務地址沒生效引起的

最后執行安裝時,本地環境是不能成功執行的,必須是打包環境才能安裝,如果在開發環境做到了安裝這一步,就可以打包測試了;

說下我做的大致流程:

檢測到有新版本更新,觸發下載;讀取到進度條;下載完成后,手動觸發安裝;

 

 

 

 

 

-


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM