electron “GPU进程不可用,再见,”

liwlm1x9  于 2022-12-08  发布在  Electron
关注(0)|答案(4)|浏览(1265)

我正在尝试使用电子构建一个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.

我在我的package.json中使用以下代码直接运行Electron:

"scripts": {
  ...
  "test": "electron main.js",
  ...
}

到目前为止,我唯一可以访问的Mac OS环境是大苏尔,所以还没有在早期版本的Mac OS上尝试过这个,但从谷歌搜索来看,这个错误可能与大苏尔收紧的安全/沙箱约束有关--但我猜是这样。
在任何情况下,在一些谷歌搜索后,几个建议表明尝试运行没有应用沙箱,即添加到main.js

app.commandLine.appendSwitch('no-sandbox');

这一切都很好,很好,很有效。
然而,如果我想构建和分发一个针对Mac应用商店的签名Mac应用程序,或者只是一个签名的、沙箱化的DMG或PKG安装程序,那么这就不合适了。
如果我从main.js中删除上述no-sandbox命令,并在我的授权plist中指定应用沙箱,如下所示,生成的签名应用将不会运行:

<key>com.apple.security.app-sandbox</key>
<true/>

应用程序试图打开,但只是关闭。我可以尝试在命令行运行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}}}}}

如果我构建了一个启用了no-sandbox的签名应用程序,该应用程序将在使用open <appname>.app的大苏尔上运行良好。
我已经尽了最大的努力通过谷歌,堆栈溢出等来诊断这个问题,但没有任何进展。在这里希望堆栈溢出社区可以提供我解决这个问题的关键线索。
为了进一步了解上下文,我创建了一个新的空的Electron应用程序,并按照Electron Quick Start Guide的描述创建了一个空的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.

还没有时间做什么ICU指的研究,但我想我会更新这个信息。
另一项更新:所有这些都是在我的主要开发机器Mac OS Big Sur上完成的。在Windows 10机器上尝试,使用相同的电子代码、依赖项等,一切都很好。所以这个问题要么与Mac OS Big Sur有关,要么是我的开发机器上的一个特定的本地问题,我无法识别。如果有任何关于如何诊断这个问题的建议,我将不胜感激。
最新消息:根据猜测,我在我的mac上创建了一个新用户,把代码放在那里,它运行得很好。所以--这可能意味着我需要找到我的配置文件中安装的东西,或者我自己的配置文件/设置中的一些损坏。一如既往,任何建议都很感谢。

gv8xihay

gv8xihay1#

在我的例子中,我使用命令行开关--in-process-gpu,或者:

app.commandLine.appendSwitch('in-process-gpu');

这里还有一个广泛的Chromium开关列表,您可以尝试:https://peter.sh/experiments/chromium-command-line-switches/
是的,整个硬化运行时的事情就是这样一个可怕的,可怕的混乱!现在来弄清楚下一个崩溃!

0md85ypi

0md85ypi2#

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

GPU process isn't usable. Goodbye.

我的开发目录都在一个通过符号链接访问的文件系统上。只要我把这个应用的文件夹移到我的主目录(不涉及符号链接),我就可以用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}}}}}

也就是说,这是一大进步。

jdzmm42g

jdzmm42g3#

潜在的问题似乎是Mac OS沙盒阻止GPU进程正确生成。
打包应用程序时,您可以指定各种授权,但并非所有授权都是平等创建的,尤其是需要访问钥匙串、安全区和TouchID的授权。
如果你指定了一个provisioning profile-确保所有这些授权都只在原始文件中,保持你继承的授权为空或最小。在我的例子中,我在继承的授权中指定了keychain-access-groups,这是一个痛苦的教训。删除它使构建不会崩溃!
我相信在你的情况下,很可能是你试图访问应用程序本身之外的文件,这可能导致沙箱阻止打开GPU进程。

goqiplq2

goqiplq24#

我知道OP针对MacOS报告了这一点,但在我的Windows 10虚拟机上,我使用以下说明创建了电子快速启动应用程序...

net use T: \\busdata\company\BrianT
T:
cd \Development\Sandbox\electron
"C:\Users\thomasb\AppData\Local\GitHubDesktop\app-2.9.15\resources\app\git\cmd\git.exe" clone https://github.com/electron/electron-quick-start
cd electron-quick-start
npm install && npm start

......然后电子将错误信息写入控制台,与OP报告的错误相同:

[5796:1025/121431.238:ERROR:gpu_process_host.cc(969)] GPU process launch failed: error_code=18
[5796:1025/121431.328:FATAL:gpu_data_manager_impl_private.cc(441)] GPU process isn't usable. Goodbye.

前面的回答提到了符号链接,为了进一步调查,我将整个电子快速入门文件夹从T:(重新Map的网络文件夹)到C:(我的本地磁盘)。
然后,当我在复制到C:的文件夹中运行npm start时,没有错误
看起来电子公司对源文件的存放位置很挑剔。

相关问题