Jelajahi Sumber

实现单实例运行,控制同一时间只有一个实例运行

sw 1 bulan lalu
induk
melakukan
edf43d61d9
1 mengubah file dengan 20 tambahan dan 1 penghapusan
  1. 20 1
      main.js

+ 20 - 1
main.js

@@ -11,11 +11,30 @@ const __filename = fileURLToPath(import.meta.url);
 const __dirname = dirname(__filename);
 const execAsync = promisify(exec);
 
+let win=null;
+
+// -------------- 单实例检查 ------------
+// 1. 请求单实例锁
+const gotTheLock = app.requestSingleInstanceLock();
+if (!gotTheLock) {
+  // 抢锁失败 -> 立即退出
+  app.quit();
+}
+
+// 2. 抢锁成功 -> 监听后续启动事件
+app.on('second-instance', (ev, cmd, cwd, additionalData) => {
+  // 把已存在的窗口提到最前
+  if (win) {
+    if (win.isMinimized()) win.restore();
+    win.focus();
+  }
+  // todo 也可以在这里解析 cmd 中的参数,做打开文件等操作
+});
 // -------------- 创建窗口 --------------
 function createWindow() {
   const isMac = process.platform === 'darwin';
 
-  const win = new BrowserWindow({
+  win = new BrowserWindow({
     show: false,
     frame: false,
     titleBarStyle: 'hidden',