Electron打包的桌面应用程序,运行中程序黑屏、白屏等渲染进程崩溃问题解决

1. 问题描述

使用Electron打包web项目为桌面应用程序,由于运行环境的硬件条件或其他一些原因,导致程序运行过程中黑屏、白屏、崩溃。

2. 解决过程

2.1 依赖版本:

  • electronv8.2.1
  • electron-log: v4.1.1
  • electron-packager: v14.2.1

2.2 运行环境

win7 x86

2.3 分析过程

2.3.1 排除

程序本身运行不会“白屏”,但运行长时间后,会偶尔出现“白屏”情况,重启程序,可以正常显示。故而排除开发的程序本身存在严重问题的可能,转而从白屏的现象本身寻找思路。

2.3.2 寻找规律
  • 观察发现:每当程序崩溃时,任务管理器中,此程序的某个进程出了状况(时间久了,不记得具体情况了,当时没有截图)
  • 手动复现:任务管理器中,win10关掉electron程序进程内存占用最大的一个(win7的话关掉第二大的),可以复现白屏的效果。
  • 进一步发现,手动复现的过程中,实际关掉的是此程序的“渲染进程”。
2.3.2 寻找解决方法
  • 查找到官方文档中app的事件renderer-process-crashed,当渲染进程webContents崩溃或关闭时触发。
  • 鉴于打包后的程序,在崩溃时,无法直接从控制台中拿到log,引入electron-log包(此处不展开),将输出日志记录到本地文件中,在Electron的“入口文件”中,添加下面代码:
// 测试一下是否可以捕捉到崩溃的状态
app.on("renderer-process-crashed", function (event, webContents, details) {
    console.error("renderer-process-crashed catched.");
});
  • 使用上述“手动复现”的方式模拟“白屏”事件发生,查找“日志文件”,查看main.log中输出的内容,发现确实捕捉到了。
    • 日志路径:C:\Users\用户名\AppData\Roaming\程序名\logs
    • main.log:主进程的日志, 入口文件中输出的日志会在这里。
    • renderer.log: 渲染进程的日志,web项目中输出的日志会在这里。
  • 既然已经捕捉到了,那么只要在此处对崩溃进行处理就可以了
app.on("renderer-process-crashed", function (event, webContents, details) {
    // 输出一下捕捉到的reason,实际可以根据不同的“原因”进行具体处理
    console.error("renderer-process-crashed, reason => ", JSON.stringify(details));
    // 基于我在开发的程序本身的设定,此处重启应用就可以了
    app.relaunch({args: process.argv.slice(1).concat(['--relaunch'])});
    // 尝试关闭所有窗口
    app.quit();
});
  • 结合运维人员的反馈,“白屏”问题没再出现过了。

3. 针对上文中内容的一些说明

3.1 renderer-process-crashed

返回:

  • event {Event}
  • webContents {WebContents}
  • killed {boolean}
    当渲染器进程webContents崩溃或关闭(杀死)时触发。
    已废弃:在新的electron版本中,已经被render-process-gone替代

参考Electron官方API文档 https://www.electronjs.org/zh/docs/latest/api/app#%E4%BA%8B%E4%BB%B6-render-process-gone

3.2 electron-log

参考electron-loggithub https://github.com/megahertz/electron-log/

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要使用electron-builder打包Linux桌面程序,你可以使用以下命令: ``` electron-builder --linux ``` 这个命令会使用electron-builder来打包你的electron项目,并生成适用于Linux系统的安装包。\[2\]在运行这个命令之前,你需要确保你的项目已经完备,并且已经安装了electron-builder的依赖。你可以通过全局安装electron-builder来安装依赖,使用命令`npm install -g electron-builder`。\[3\]另外,你也可以在项目安装electron-builder的依赖,使用命令`npm install electron-builder`。一旦依赖安装完成,你就可以使用上述命令来打包Linux桌面程序了。 #### 引用[.reference_title] - *1* *3* [electron-builder打包Electron桌面应用程序](https://blog.csdn.net/HTongi/article/details/113726323)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Electron打包桌面应用程序](https://blog.csdn.net/weixin_43561201/article/details/124616088)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值