Вызов app.quit () в электронном приложении ничего не делает в Windows (но работает в Linux) - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть электронное приложение, которое работает в основном в фоновом режиме, иногда открывая окно в правом нижнем углу экрана в ответ на сообщения, полученные клиентом NATS.

В приложении есть значок на панели задачи меню с кнопкой выхода, которая вызывает electron.app.quit()

const createTray = () => {
  const trayIconPath = path.join(__dirname, "icon.png");
  tray = new Tray(trayIconPath);
  const menuTemplate = [
    {
      label: `Version: ${app.getVersion()}`,
      type: "normal",
      enabled: false
    },
    ...(other buttons here)...
    {
      label: "Quit",
      type: "normal",
      click: app.quit
    },
    { label: "Exit", type: "normal", click: app.exit }
  ];

  const contextMenu = Menu.buildFromTemplate(menuTemplate);
  tray.setToolTip("Tooltip text");
  tray.setContextMenu(contextMenu);
};

В Linux эта кнопка работает нормально.Приложение закрывается, и когда я проверяю ps, я обнаруживаю, что задача больше не выполняется.

В Windows она, похоже, ничего не делает.Приложение продолжает работать, значок остается в трее, и если я нажимаю любую другую кнопку в трее, они работают нормально, как будто приложение никогда не закрывалось.

Примечание: кнопка выхода работает на обоихплатформ, но не запускает событие will-quit, к которому я хотел бы добавить обработчик.

Чтобы попытаться отладить, я попытался добавить обработчики к before-quit, will-quit иquit events:

app.on("before-quit", () => {
  console.log("before-quit");
  dialog.showMessageBoxSync(null, {
    title: "Before Quit",
    message: "Before Quit",
    buttons: ["OK"]
  });
});

app.on("will-quit", () => {
  console.log("will-quit");
  dialog.showMessageBoxSync(null, {
    title: "Will Quit",
    message: "Will Quit",
    buttons: ["OK"]
  });
});

app.on("quit", () => {
  console.log("did quit");
  dialog.showMessageBoxSync(null, {
    title: "Did Quit",
    message: "Did Quit",
    buttons: ["OK"]
  });
});

В Linux, после нажатия Quit, я вижу все три диалоговых окна, открытых до выхода из приложения.

В Windows, после нажатия Quit, я вижу Before Quit диалог открыт, но ни один из двух других не делает.

На данный момент нет других обработчиков этих событий.

Я попытался добавить блок try / catch вокруг вызова приложения.quit, заменив обработчик нажатия кнопки Quit следующим методом:

const quit = () => {
  try {
    mainWindow.close();
    app.quit();
  } catch (err) {
    console.error(err);
    dialog.showMessageBoxSync(null, {
      title: "Error quitting",
      message: err.message,
      buttons: ["OK"]
    });
  }
};

После внесения этого изменения и попытки выйти из приложения в Windows я по-прежнему вижу диалоговое окно Before Quit, ноне вижу ни одного сообщения об ошибке, и приложение продолжаетдля запуска.

Итак, что мешает моему приложению правильно завершить работу в Windows?Что еще я могу сделать для устранения проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...