2
2

More than 5 years have passed since last update.

Electronアップデータのチャネル対応

Posted at

自分用メモなので殴り書き注意

もろもろ都合でelectron, electron-builderも古い。
けど、基本的な構造はそんな変わってない。。。ような気がする。。。(未確認)

package.json 設定

package.json
  "dependencies": {
    "electron-auto-updater": "^1.0.0"
...
  }
  "devDependencies": {
    "electron": "^2.0.0",
    "electron-builder": "^20.15.1",
    "electron-packager": "^12.1.0",
    "electron-updater": "^2.21.10"
  },
  "build": {
    "win": {
      "target": "nsis",
      "icon": "icon.ico",
      "publish": [
        {
          "provider": "generic",
          "url": "{インストーラ配置URL}"
        }
      ]
    }
  }

インストーラ配置URLには、build実行時にできる「latest.yml」と、インストーラEXE実体を置く。
HTTPS対応してないとダメだったような。
インストーラEXEはバージョンによってファイル名変わる。

アップデータ処理

main.js
const autoUpdater = require('electron-auto-updater').autoUpdater;

// アップデート確認
autoUpdater.checkForUpdates();

// アップデート確認開始
autoUpdater.addListener('checking-for-update', function() {
    console.log("checking-for-update");
});

// アップデートあり
autoUpdater.addListener('update-available', function() {
    console.log("update-available");

    // レンダープロセスへ通知
    mainWindow.webContents.send('update_available', 'アップデートあったよ');
    mainWindow.webContents.on('did-finish-load', () => {
        console.log('did-finish-load');
        mainWindow.webContents.send('update_available', 'アップデートあったよ');
    });
});

// アップデートなし
autoUpdater.addListener('update-not-available', function() {
    console.log("update-not-available");

    mainWindow.webContents.send('update_not_available', 'アップデートなかったよ');
    mainWindow.webContents.on('did-finish-load', () => {
        console.log('did-finish-load');
        mainWindow.webContents.send('update_not_available', 'アップデートなかったよ');
    });
});

// アップデートダウンロード完了
autoUpdater.addListener('update-downloaded', function(event, releaseNotes, releaseName, releaseDate, updateURL) {
    console.log("update-downloaded");
    console.log(releaseName);
    mainWindow.webContents.send('update_downloaded', 'DLしたよ');
    return true;
});

// アップデートインストール開始(レンダラープロセスから呼ぶ)
ipc.on('do_quit_and_install', function(event, args) {
    console.log("do_quit_and_install");
    autoUpdater.quitAndInstall();
});

バージョン、マルチチャネル

バージョンは通常「X.X.X」形式

package.json内のバージョンを「X.X.X-beta.1」などとすると、betaチャネル用のビルドが作成できる。
対応している文字列は、「alpha」「beta」。(他にもあるかもしれないが未確認)

ベータ版でインストールした場合は、アップデートチャネルがbetaとなる。
(アップデータ配置URL内の、beta.ymlを参照しにいく)
ベータ版インストール後に自動で通常版に戻したい場合は、beta.ymlの内容を、latest.ymlの内容で置き換える。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2