电子app.makeSingleInstance可以避免多个实例抛出javascript错误

时间:2019-03-10 23:21:58

标签: javascript electron

我正在使用电子2.0.7,并且我想通过使用app.makeSingleInstance防止该应用程序的多个实例。

它可以工作,但是当我尝试运行该应用程序的另一个实例时,出现此错误:“在主进程中发生Javascript错误”弹出窗口。

这是main.ts中的代码:

function checkSingleInstance() {
  // to make singleton instance
  const isSecondInstance = app.makeSingleInstance((commandLine, workingDirectory) => {
    // Someone tried to run a second instance, we should focus our window.
    if (win) {
      if (win.isMinimized()) {
        win.restore();
        win.focus();
      }
    }
  });

  if (isSecondInstance) {
    app.quit();
    return;
  }
}

checkSingleInstance();

这是错误:

A Javascript error is occurred in the main process

2 个答案:

答案 0 :(得分:0)

完成发布的源代码后,我可以使用Electron 2.0.7很好地运行它。

您看到的错误可能源于代码的其他部分。根据错误消息判断,检查是否在某处导入名称为screen的模块。


这是您的源代码,已完成MCVE:

const {app, BrowserWindow} = require('electron')

let win = null

console.log(`Node ${process.versions.node}, Chrome ${process.versions.chrome}, Electron ${process.versions.electron}`)

function checkSingleInstance() {
  // to make singleton instance
  const isSecondInstance = app.makeSingleInstance((commandLine, workingDirectory) => {
    // Someone tried to run a second instance, we should focus our window.
    if (win) {
      if (win.isMinimized()) {
        win.restore();
        win.focus();
      }
    }
  });

  if (isSecondInstance) {
    console.log("Exiting because another instance is running")
    app.quit();
    return;
  }
}

checkSingleInstance();

app.on('ready', () => {
  win = new BrowserWindow({width: 200, height: 200});
  win.on('closed', () => win = null);
});

答案 1 :(得分:0)

尝试将app.quit()替换为app.exit()

app.exit()不会在退出之前发出事件,而app.quit()会进行适当的清理。

很难确切说明错误的出处和原因,但是此问题已记录在here中。