Electron app.makeSingleInstance, чтобы избежать нескольких ошибок javascript - PullRequest
0 голосов
/ 11 марта 2019

Я использую электрон 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 голосов
/ 16 марта 2019

Попробуйте заменить app.quit() на app.exit().

app.exit() не генерирует события перед выходом, в отличие от app.quit(), который выполняет надлежащую очистку.

Трудно сказатьоткуда и почему возникла ошибка, но эта проблема задокументирована здесь .

0 голосов
/ 11 марта 2019

После завершения исходного кода, который вы разместили, я могу нормально запустить его, используя 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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...