首页 > 解决方案 > 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 中打开文件时收到以下错误消息:

无法显示“电子教程应用程序”

没有为“共享库”文件安装应用程序。是否要搜索应用程序来打开此文件?

[否] [是]

有没有办法做到这一点?

标签: electronelectron-packagernautilus

解决方案


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。不是我们的错误,请看上游)


推荐阅读