electron - Nautilus 无法识别电子可执行文件
问题描述
我无法Electron App
使用以下命令构建一个可执行文件:
electron-packager . electron-tutorial-app --overwrite --asar=true --platform=linux --arch=x64 --prune=true --out=release-builds
构建文件是一个共享库文件 (application/x-sharedlib),不在Ubuntu 18
. 相反,我在 Nautilus 中打开文件时收到以下错误消息:
无法显示“电子教程应用程序”
没有为“共享库”文件安装应用程序。是否要搜索应用程序来打开此文件?
[否] [是]
有没有办法做到这一点?
解决方案
TL;DR:生成的文件实际上是一种新格式的可执行文件。他们没有任何问题。Nautilus/文件管理器错误地将它们识别为可执行文件。有一些解决方案,例如创建一个 *.desktop 文件来启动应用程序。
分析
这种现象是 Electron 构建 Linux 二进制文件方式发生变化的副作用。提交9294facf将二进制格式从 ELF 更改为PIE。更改非常小,仅影响单个文件 (BUILD.gn)。从版本 4.0.0 开始,Electron 中的更改已生效。
文件管理器利用file
命令来决定如何处理文件(例如打开图像查看器、文本编辑器或执行文件)。file
无法区分共享库和 PIE 可执行文件,因此会错误分类 PIE 文件(请参阅相应的错误报告)。
解决方案
从终端运行
由于该问题仅存在于图形文件管理器中,因此您可以简单地从终端或脚本运行可执行文件。这在一定程度上涉及非技术最终用户,而不是 OP 想要的。
等待上游修复
等待file
将 PIE 识别为可执行文件。反过来,这可能会导致 Nautilus 等文件管理器正确启动 PIE。目前尚不清楚这是否会发生或何时发生。如果发生这种情况,它可能只会包含在未来的发行版中。
使用桌面文件
创建桌面文件以启动应用程序。无论如何,这是启动桌面应用程序的常见方式。
创建一个名为myapp.desktop
以下内容的文件。
[Desktop Entry]
Name=My Application
Exec=/path/to/binary
Terminal=false
Type=Application
StartupNotify=true
Encoding=UTF-8
然后,通过发出 . 标记桌面文件可执行文件chmod +x myapp.desktop
。双击该文件应按预期启动应用程序。
更多信息
electron-packager 项目中对应的讨论:https ://github.com/electron-userland/electron-packager/issues/901 。(要点:这个问题不是由电子包装器引起的,请看上游)
electron 项目中对应的 issue 是https://github.com/electron/electron/issues/15406。(要点:他们想在 Linux 上启用 PIE。不是我们的错误,请看上游)
推荐阅读
- python - 如何使用已经训练好的模型测试您自己的(单张图像)数据?
- javascript - 如果单击不喜欢相同的评论,则删除喜欢按钮的活动状态,如果单击喜欢,则删除不喜欢按钮的活动状态
- python - 如何使用 Sphinx 在 reStructuredText 中包含植物文件
- ios - Microblink : 扫描身份证的两面
- java - 春天:响应实体
返回空值 - java - 返回类型上的误报 Sonar S1452 包含 java 中通配符泛型的泛型
- java - 如何用较少的日志信息确定 NullPointerException 以拥有自己的源代码?
- android - Ionic android 构建卡在启动 Gradle 守护进程
- javascript - ajax结果的Android webview goback()问题
- python - 创建一个 numba 类型的列表而不循环遍历 python 列表