schedule2021-08-25

Electronでアプリの2重起動を防ぐためのコード

Electronで作ったアプリが多重に起動していることを検知する仕組みがある。 これを使ってアプリの2重起動を防ぐ方法を紹介する。

なお確認はWindows 10 Homeで行った。

アプリが多重起動していることを検知する

appの次の関数で多重起動を判定できる。

app.requestSingleInstanceLock()
戻り値 boolean

このメソッドの戻り値は、アプリケーションのこのインスタンスのロックが成功したかどうかを表します。 ロック状態にできなかった場合、アプリケーションの他のインスタンスが既にロックされており、ただちに終了すると想定できます。

app.requestSingleInstanceLock() - www.electronjs.org

つまり、アプリを立ち上げてapp.requestSingleInstanceLock()の結果がfalseのとき既に起動しているアプリがあるため、自身のプロセスを終了させることで多重起動を防ぐことができる。

コードサンプル

以下、TypeScriptで書いているがJavaScriptでももちろん問題ありません。

main.ts

"use strict";

import { app } from "electron";
import log from "electron-log";

/** 
 * アプリの二重起動を防ぐ
 */
const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) {
  log.info("APP_ALREADY_RUNNING");
  log.info("APP_QUIT");
  app.quit();
}

/** 
 * アプリの起動処理など
 */
app.on('ready', () => {
  log.info("APP_READY");

});

おわり