electron软件奔溃捕获

electron开发的软件,捕获软件异常,对出错原因进行记录或者进行其他逻辑操作。

创建BrowserWindow后,添加如下代码

  mainWin.webContents.on("crashed", async (e, killed) => {
    let result = await dialog.showMessageBox({
      type: "error",
      title: "应用程序崩溃",
      message: "当前程序发生异常,是否要重新加载应用程序?",
      buttons: ["是", "否"],
    })
    if (result.response == 0){
      mainWin.webContents.reload()
    } else {
      app.quit()
      console.log('系统奔溃,可在此进行日志收集,将奔溃原因写入日志文件')
    }
  })

electron软件奔溃捕获_第1张图片
或者


app.on('render-process-gone', async (e, w, d) => {
  const _path ='/home/logs/error.log'
  if (!fs.existsSync(_path)) {
    fs.writeFileSync(_path, `[${getFormatDate('-', '', '-', '_')}] 系统出错日志
    ·clean-exit - 以零为退出代码退出的进程
    ·abnormal-exit - 以非零退出代码退出的进程
    ·killed - 进程发送一个SIGTERM,否则是被外部杀死的。
    ·crashed - 进程崩溃
    ·oom - 进程内存不足
    ·launch-failed - 进程从未成功启动
    ·integrity-failure - 窗口代码完整性检查失败
    \n`, { encoding: 'utf-8' })
  }
  if(d.reason == "crashed" || d.reason == "oom") { // 进程崩溃 / 进程内存不足
    let result = await dialog.showMessageBox({
      type: "error",
      title: "应用程序崩溃",
      message: "当前程序发生异常,是否要重新加载应用程序?",
      buttons: ["是", "否"],
    })
    const msg = `[${new Date()}] 渲染进程被杀死${d.reason}`
    if (result.response == 0){
     fs.appendFileSync(_path, `${msg}重新加载软件\n`)
      mainWin.webContents.reload()
    } else {
    	 fs.appendFileSync(_path, `${msg}\n`)
    	app.quit()
    }
  } else {
    fs.appendFileSync(_path, `[${new Date()}] 渲染进程被杀死${d.reason}\n`)
  }
})

你可能感兴趣的:(electron,electron,javascript)