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');
};