Восстановление электронов после сбоя при рендеринге

Я создаю электронное приложение, которое должно перезагрузить окно процесса рендеринга в случае сбоя.

В настоящее время я могу перезапустить приложение из основного процесса

app.relaunch();
app.quit();

Но я не могу обнаружить сбой окна. Я пытался использовать

win.on('unresponsive', () => { ... } );

Но событие не генерируется, когда я завершаю процесс.

Чтобы завершить процесс, я попытался:

  • ссылаясь на process.crash()
  • используя всю доступную память.

Оба способа успешно завершают процесс, но, опять же, я не могу найти способ его обнаружить.

Я попытался также с помощью процесса рендеринга, window.onerror(...) и отправка через IPC главному процессу сообщения при обнаружении сбоя, но, похоже, это не сработает.

2 ответа

Вы должны искать событие "разбился" в webContents. Проверьте https://electronjs.org/docs/api/web-contents

Например, поместите что-то вроде этого в основной процесс:

win.webContents.on('crashed', (e) => {
    app.relaunch();
    app.quit()
});

возможно, загляните в "pm2-windows-service", который может установить ваше приложение как службу Windows и посмотреть, выйдет ли оно из строя, чтобы перезапустить его

https://www.npmjs.com/package/pm2-windows-service

также у электрона есть приложение.setLoginItemSettings({openAtLogin: true}); но это не защищает от сбоев, обеспечивает только автоматический запуск приложения при входе в Windows

Другие вопросы по тегам