正在显示
2 个修改的文件
包含
75 行增加
和
10 行删除
| ... | @@ -68,13 +68,38 @@ class MainInit { | ... | @@ -68,13 +68,38 @@ class MainInit { |
| 68 | if (process.env.NODE_ENV === 'development') { | 68 | if (process.env.NODE_ENV === 'development') { |
| 69 | this.mainWindow.webContents.openDevTools({ mode: 'undocked', activate: true }) | 69 | this.mainWindow.webContents.openDevTools({ mode: 'undocked', activate: true }) |
| 70 | } | 70 | } |
| 71 | - // 当确定渲染进程卡死时 | 71 | + // 当确定渲染进程卡死时,分类型进行告警操作 |
| 72 | - this.mainWindow.webContents.on('crashed', () => { | 72 | + app.on('render-process-gone', (event, webContents, details) => { |
| 73 | + const message = { | ||
| 74 | + title: "", | ||
| 75 | + buttons: [], | ||
| 76 | + message: '', | ||
| 77 | + } | ||
| 78 | + switch (details.reason) { | ||
| 79 | + case 'crashed': | ||
| 80 | + message.title = "警告" | ||
| 81 | + message.buttons = ['确定', '退出'] | ||
| 82 | + message.message = "图形化进程崩溃,是否进行软重启操作?" | ||
| 83 | + break; | ||
| 84 | + case 'killed': | ||
| 85 | + message.title = "警告" | ||
| 86 | + message.buttons = ['确定', '退出'] | ||
| 87 | + message.message = "由于未知原因导致图形化进程被终止,是否进行软重启操作?" | ||
| 88 | + break; | ||
| 89 | + case 'oom': | ||
| 90 | + message.title = "警告" | ||
| 91 | + message.buttons = ['确定', '退出'] | ||
| 92 | + message.message = "内存不足,是否软重启释放内存?" | ||
| 93 | + break; | ||
| 94 | + | ||
| 95 | + default: | ||
| 96 | + break; | ||
| 97 | + } | ||
| 73 | dialog.showMessageBox(this.mainWindow, { | 98 | dialog.showMessageBox(this.mainWindow, { |
| 74 | type: 'warning', | 99 | type: 'warning', |
| 75 | - title: '警告', | 100 | + title: message.title, |
| 76 | - buttons: ['重载', '退出'], | 101 | + buttons: message.buttons, |
| 77 | - message: '图形化进程失去响应,是否等待其恢复?', | 102 | + message: message.message, |
| 78 | noLink: true | 103 | noLink: true |
| 79 | }).then(res => { | 104 | }).then(res => { |
| 80 | if (res.response === 0) this.mainWindow.reload() | 105 | if (res.response === 0) this.mainWindow.reload() |
| ... | @@ -94,23 +119,58 @@ class MainInit { | ... | @@ -94,23 +119,58 @@ class MainInit { |
| 94 | else this.mainWindow.close() | 119 | else this.mainWindow.close() |
| 95 | }) | 120 | }) |
| 96 | }) | 121 | }) |
| 97 | - app.on('gpu-process-crashed', () => { | 122 | + /** |
| 123 | + * 新的gpu崩溃检测,详细参数详见:http://www.electronjs.org/docs/api/app | ||
| 124 | + * @returns {void} | ||
| 125 | + * @author zmr (umbrella22) | ||
| 126 | + * @date 2020-11-27 | ||
| 127 | + */ | ||
| 128 | + app.on('child-process-gone', (event, details) => { | ||
| 129 | + const message = { | ||
| 130 | + title: "", | ||
| 131 | + buttons: [], | ||
| 132 | + message: '', | ||
| 133 | + } | ||
| 134 | + switch (details.type) { | ||
| 135 | + case 'GPU': | ||
| 136 | + switch (details.reason) { | ||
| 137 | + case 'crashed': | ||
| 138 | + message.title = "警告"; | ||
| 139 | + message.buttons = ['确定', '退出']; | ||
| 140 | + message.message = "硬件加速进程已崩溃,是否关闭硬件加速并重启?"; | ||
| 141 | + break; | ||
| 142 | + case 'killed': | ||
| 143 | + message.title = "警告"; | ||
| 144 | + message.buttons = ['确定', '退出']; | ||
| 145 | + message.message = "硬件加速进程被意外终止,是否关闭硬件加速并重启?"; | ||
| 146 | + break; | ||
| 147 | + default: | ||
| 148 | + break; | ||
| 149 | + } | ||
| 150 | + break; | ||
| 151 | + | ||
| 152 | + default: | ||
| 153 | + break; | ||
| 154 | + } | ||
| 98 | dialog.showMessageBox(this.mainWindow, { | 155 | dialog.showMessageBox(this.mainWindow, { |
| 99 | type: 'warning', | 156 | type: 'warning', |
| 100 | - title: '', | 157 | + title: message.title, |
| 101 | - buttons: ['切换', '退出'], | 158 | + buttons: message.buttons, |
| 102 | - message: '侦测到图形处理设备丢失,若继续则会导致软件出现意外故障,是否切换到通用模式,若切换后仍然黑屏请联系我们。', | 159 | + message: message.message, |
| 103 | noLink: true | 160 | noLink: true |
| 104 | }).then(res => { | 161 | }).then(res => { |
| 105 | // 当显卡出现崩溃现象时使用该设置禁用显卡加速模式。 | 162 | // 当显卡出现崩溃现象时使用该设置禁用显卡加速模式。 |
| 106 | if (res.response === 0) { | 163 | if (res.response === 0) { |
| 107 | - app.disableHardwareAcceleration() | 164 | + if (details.type === 'GPU') app.disableHardwareAcceleration(); |
| 108 | this.mainWindow.reload() | 165 | this.mainWindow.reload() |
| 109 | } else { | 166 | } else { |
| 110 | this.mainWindow.close() | 167 | this.mainWindow.close() |
| 111 | } | 168 | } |
| 112 | }) | 169 | }) |
| 113 | }) | 170 | }) |
| 171 | + app.on('gpu-process-crashed', () => { | ||
| 172 | + | ||
| 173 | + }) | ||
| 114 | this.mainWindow.on('closed', () => { | 174 | this.mainWindow.on('closed', () => { |
| 115 | this.mainWindow = null | 175 | this.mainWindow = null |
| 116 | }) | 176 | }) | ... | ... |
| ... | @@ -36,6 +36,7 @@ | ... | @@ -36,6 +36,7 @@ |
| 36 | <el-button type="primary" round @click="getMessage" | 36 | <el-button type="primary" round @click="getMessage" |
| 37 | >查看消息</el-button | 37 | >查看消息</el-button |
| 38 | > | 38 | > |
| 39 | + <el-button type="primary" round @click="crash">模拟崩溃</el-button> | ||
| 39 | </div> | 40 | </div> |
| 40 | <div class="doc"> | 41 | <div class="doc"> |
| 41 | <el-button type="primary" round @click="openNewWin" | 42 | <el-button type="primary" round @click="openNewWin" |
| ... | @@ -168,6 +169,10 @@ export default { | ... | @@ -168,6 +169,10 @@ export default { |
| 168 | }); | 169 | }); |
| 169 | }, | 170 | }, |
| 170 | methods: { | 171 | methods: { |
| 172 | + crash() { | ||
| 173 | + process.crash(); | ||
| 174 | + // process.hang() | ||
| 175 | + }, | ||
| 171 | openNewWin() { | 176 | openNewWin() { |
| 172 | let data = { | 177 | let data = { |
| 173 | url: "/form/index", | 178 | url: "/form/index", | ... | ... |
-
请 注册 或 登录 后发表评论