You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron:抛出错误后,如何在弹窗确认后执行app.quit()?

Electron 错误弹窗点击确定后自动退出应用的实现方案

方案1:主进程捕获全局未捕获错误

如果错误发生在主进程,直接监听uncaughtException事件,利用Electron同步的错误弹窗实现需求:

const { app, dialog } = require('electron');

process.on('uncaughtException', (error) => {
  // 同步弹窗会阻塞代码执行,直到用户点击确定
  dialog.showErrorBox('应用出错', error.message);
  // 用户操作完成后执行退出
  app.quit();
});

showErrorBox是同步方法,代码会等待用户点击确定后才继续执行,无需Promise即可实现点击后退出的逻辑。

方案2:渲染进程拦截错误并通知主进程处理

如果错误发生在渲染进程,默认Chrome错误弹窗无法绑定关闭事件,需手动拦截并通过IPC通知主进程处理:

  1. 渲染进程代码:
const { ipcRenderer } = require('electron');

// 拦截全局错误,阻止默认弹窗弹出
window.addEventListener('error', (event) => {
  event.preventDefault();
  // 向主进程传递错误信息
  ipcRenderer.send('handle-fatal-error', event.error.message);
});
  1. 主进程代码:
const { ipcMain, dialog, app } = require('electron');

ipcMain.on('handle-fatal-error', (_, errorMsg) => {
  // 显示带确定按钮的弹窗,返回Promise监听用户操作
  dialog.showMessageBox({
    type: 'error',
    title: '应用出错',
    message: errorMsg,
    buttons: ['确定']
  }).then(() => {
    // 用户点击确定后退出应用
    app.quit();
  });
});

方案3:渲染进程直接调用弹窗(需配置Node集成)

若渲染进程开启了nodeIntegration,也可直接在渲染进程调用弹窗并处理退出(不推荐,易引发权限问题):

const { dialog } = require('electron').remote;

window.addEventListener('error', (event) => {
  event.preventDefault();
  dialog.showErrorBox('应用出错', event.error.message);
  // 弹窗关闭后关闭当前窗口,或通知主进程退出
  window.close();
});

内容的提问来源于stack exchange,提问作者lpuccio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 09:40:54