Chapter 13

単一ウィンドウ(シングルインスタンス)の強制 (requestSingleInstanceLock)

Kei Touge
Kei Touge
2022.05.28に更新

https://www.electronjs.org/ja/docs/latest/api/app#apprequestsingleinstancelockadditionaldata

requestSingleInstanceLock()

メインプロセス

main.js
// シングルインスタンス強制の現状 (boolean)
const gotTheLock = app.requestSingleInstanceLock();

if (!gotTheLock) {
  /**
   * すでにインスタンスが存在する場合は
   * あたらしいインスタンスはそのまま終了させる
   */
  app.exit();
} else {
  app.whenReady().then(() => {
    createWindow();
  });
}

Windows で既存のウィンドウを再利用する

メインプロセス

second-instance イベントとして開かれたファイルのパスは process.argv 配列の第 3 要素となることに注意。

main.ts
const createWindow = () => {
  const mainWindow = new BrowserWindow();

  app.on('second-instance', (_e, argv) => {
    // ウィンドウが最小化されていたらレストアして、フォーカスを当てる
    if (mainWindow.isMinimized()) mainWindow.restore();
    mainWindow.focus();

    // ファイルからインスタンスが開始された場合
    if (argv.length >= 3) {
      const filepath = argv[argv.length - 1];

      // レンダラープロセスへファイルパスを送信
      mainWindow.webContents.send('menu-open', filepath);
    }
  });

  mainWindow.loadFile('dist/index.html');
};