Восстановление электронов после сбоя при рендеринге
Я создаю электронное приложение, которое должно перезагрузить окно процесса рендеринга в случае сбоя.
В настоящее время я могу перезапустить приложение из основного процесса
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