“GPU 进程无法使用。再见。”

Arm*_*man 19 macos electron electron-builder

我正在尝试使用 Electron 构建 Windows 和 Mac OS 应用程序,但遇到了障碍。

简而言之,如果我尝试在 Mac OS Big Sur 上直接使用 Electron 运行应用程序(而不是构建 Mac 应用程序然后运行它),我会返回以下错误:

[35941:0821/171720.038162:FATAL:gpu_data_manager_impl_private.cc(415)] GPU process isn't usable. Goodbye.
Run Code Online (Sandbox Code Playgroud)

我使用以下命令直接使用 Electron 运行package.json

"scripts": {
  ...
  "test": "electron main.js",
  ...
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我可以访问的唯一 Mac 操作系统环境是 Big Sur,因此还没有在早期版本的 Mac 操作系统上尝试过此操作,但从谷歌搜索看来,此错误可能与 Big Sur 加强的安全性/沙箱限制有关 - 但我猜测关于那个。

无论如何,经过一些谷歌搜索后,一些建议表明尝试在没有应用程序沙箱的情况下运行,即将其添加到main.js

app.commandLine.appendSwitch('no-sandbox');
Run Code Online (Sandbox Code Playgroud)

这一切都很好并且有效。

但是,如果我想构建和分发针对 Mac 应用商店的签名 Mac 应用程序或只是签名的沙盒 DMG 或 PKG 安装程序,那么这将不适合。

如果我删除上述no-sandbox命令main.js并在我的权利中指定应用程序沙箱,plist如下所示,生成的签名应用程序将不会运行:

<key>com.apple.security.app-sandbox</key>
<true/>
Run Code Online (Sandbox Code Playgroud)

该应用程序尝试打开并关闭。我可以尝试在命令行中运行,open <appname>.app但这会在控制台中引发以下错误:

The application cannot be opened for an unexpected reason, error=Error Domain=NSOSStatusErrorDomain Code=-10826 "kLSNoLaunchPermissionErr: User doesn't have permission to launch the app (managed networks)" UserInfo={_LSFunction=_LSLaunchWithRunningboard, _LSLine=2561, NSUnderlyingError=0x7fd3c9c13db0 {Error Domain=RBSRequestErrorDomain Code=5 "Launch failed." UserInfo={NSLocalizedFailureReason=Launch failed., NSUnderlyingError=0x7fd3c9c158e0 {Error Domain=NSPOSIXErrorDomain Code=153 "Unknown error: 153" UserInfo={NSLocalizedDescription=Launchd job spawn failed with error: 153}}}}}
Run Code Online (Sandbox Code Playgroud)

如果我构建一个已启用的签名应用程序no-sandbox,该应用程序将在 Big Sur 上使用open <appname>.app.

我已尽力通过 Google、Stack Overflow 等来诊断此问题,但一无所获。希望 Stack Overflow 社区能为我提供解决这个问题的关键线索。

为了进一步了解上下文,我创建了一个新的空 Electron 应用程序,并按照Electron 快速入门指南进行了描述创建一个空应用程序的部分,从main.js技术上讲,该应用程序应该允许 Electron 应用程序启动 - 但它不会。BrowserWindow即使没有实例化或编写我自己的任何自定义代码,GPU 也会抛出上面描述的相同错误。

新更新:我将这些环境变量设置为 true,然后尝试使用以下命令运行应用程序npm start

  • ELECTRON_ENABLE_LOGGING
  • ELECTRON_DEBUG_NOTIFICATIONS
  • ELECTRON_ENABLE_STACK_DUMPING

结果是更详细的错误输出:

[48836:0823/165857.676747:ERROR:icu_util.cc(179)] icudtl.dat not found in bundle
[48836:0823/165857.676838:ERROR:icu_util.cc(243)] Invalid file descriptor to ICU data received.
[48778:0823/165857.677376:ERROR:gpu_process_host.cc(1003)] GPU process exited unexpectedly: exit_code=5
[48778:0823/165857.677430:WARNING:gpu_process_host.cc(1317)] The GPU process has crashed 1 time(s)
[48850:0823/165857.827224:ERROR:icu_util.cc(179)] icudtl.dat not found in bundle
[48848:0823/165857.827255:ERROR:icu_util.cc(179)] icudtl.dat not found in bundle
[48850:0823/165857.827341:ERROR:icu_util.cc(243)] Invalid file descriptor to ICU data received.
[48848:0823/165857.827358:ERROR:icu_util.cc(243)] Invalid file descriptor to ICU data received.
[48778:0823/165857.827836:ERROR:gpu_process_host.cc(1003)] GPU process exited unexpectedly: exit_code=5
[48778:0823/165857.827875:WARNING:gpu_process_host.cc(1317)] The GPU process has crashed 2 time(s)
... repeats until the GPU processes crashes 9 times ...
[48778:0823/165903.080134:FATAL:gpu_data_manager_impl_private.cc(415)] GPU process isn't usable. Goodbye.
Run Code Online (Sandbox Code Playgroud)

没有时间研究 ICU 指的是什么,但我想我会更新这些信息。

另一个更新:所有这些都是在我的主要开发机器 Mac OS Big Sur 上完成的。在 Windows 10 机器上尝试使用相同的 Electron 代码、依赖项等,一切正常。因此,该问题要么与 Mac OS Big Sur 有关,要么与我的开发计算机上我无法识别的特定本地问题有关。任何有关如何诊断此问题的建议将不胜感激。

另一个更新:根据猜测,我在我的 mac 上创建了一个新用户,将代码放在那里,它运行得很好。所以 - 这可能意味着我需要找到我的配置文件中安装的某些内容或我自己的配置文件/设置中的某些损坏的内容。一如既往,任何建议都表示赞赏。

小智 15

就我而言,我使用命令行开关、--in-process-gpu 或:

app.commandLine.appendSwitch('in-process-gpu');
Run Code Online (Sandbox Code Playgroud)

这里还有一个广泛的 Chromium 开关列表,您可以尝试: https://peter.sh/experiments/chromium-command-line-switches/

是的,整个强化运行时的事情实在是太糟糕了,太糟糕了!现在要弄清楚下一次崩溃!


Arm*_*man 3

所以——部分答案。我想我已经找到了这个错误的解决方案:

GPU process isn't usable. Goodbye.
Run Code Online (Sandbox Code Playgroud)

我的开发目录都位于通过符号链接访问的文件系统上。一旦我将此应用程序的文件夹移动到我的主目录(不涉及符号链接),我就可以启动,npm start无需启用no-sandbox,也不会看到此错误或与icudtl.dat.

我尚未确定启动打包应用程序时出现的以下错误所描述的问题是否相关/已解决:

The application cannot be opened for an unexpected reason, error=Error Domain=NSOSStatusErrorDomain Code=-10826 "kLSNoLaunchPermissionErr: User doesn't have permission to launch the app (managed networks)" UserInfo={_LSFunction=_LSLaunchWithRunningboard, _LSLine=2561, NSUnderlyingError=0x7fd3c9c13db0 {Error Domain=RBSRequestErrorDomain Code=5 "Launch failed." UserInfo={NSLocalizedFailureReason=Launch failed., NSUnderlyingError=0x7fd3c9c158e0 {Error Domain=NSPOSIXErrorDomain Code=153 "Unknown error: 153" UserInfo={NSLocalizedDescription=Launchd job spawn failed with error: 153}}}}}
Run Code Online (Sandbox Code Playgroud)

也就是说,这是向前迈出的一大步。