Electron可执行文件未被Nautilus识别

11

我无法使用以下命令构建一个Electron App的可执行文件:

electron-packager . electron-tutorial-app --overwrite --asar=true --platform=linux --arch=x64 --prune=true --out=release-builds

在Ubuntu 18上,共享库文件(application/x-sharedlib)的构建文件无法执行。相反,在Nautilus中打开该文件时,我会得到以下错误消息:

无法显示“electron-tutorial-app”

没有安装“共享库”文件的应用程序。您是否要搜索一个可以打开此文件的应用程序?

[否] [是]

有什么办法可以解决这个问题吗?

3个回答

12

TL;DR: 生产的文件实际上是一种新格式的可执行文件。它们没有问题。Nautilus/文件管理器错误地将它们识别为非可执行文件。有解决方案,例如创建一个*.desktop文件来启动应用程序。

分析

这种现象是 Electron 如何构建 Linux 二进制文件的变化的副作用。提交9294facf将二进制格式从 ELF 更改为PIE。更改很小,只影响单个文件 (BUILD.gn)。该更改已在 Electron 版本 4.0.0 开始生效。

文件管理器利用file命令决定如何处理文件(例如打开图像查看器、文本编辑器或执行文件)。file无法区分共享库和 PIE 可执行文件,因此误分类 PIE 文件(请参见相应的错误报告)。

解决方案

从终端运行

由于这个问题只存在于图形文件管理器中,您可以简单地从终端或脚本中运行可执行文件。这对于非技术终端用户来说有些麻烦,也不是 OP 所想要的。

等待上游修复

等待file识别 PIE 为可执行文件。相应地,这可能会导致 Nautilus 等文件管理器正确启动 PIE。目前不清楚这是否会发生,如果发生,它可能仅包含在未来的 distro 发布中。

使用桌面文件

创建一个桌面文件来启动应用程序。这是启动桌面应用程序的常见方式。

创建一个名为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-packager 导致的,请查看上游)

在electron项目中的相应问题是https://github.com/electron/electron/issues/15406。(要点:他们想在Linux上启用PIE。不是我们的错误,请查看上游)


1
如果您像我一样不知道如何从终端运行,请执行以下操作:$./app-name,这在上面提到的/issues/901链接中有说明。我在Ubuntu上运行了我的应用程序。 - Jacob David C. Cunningham
关于 .desktop 文件的方法,对于那些不知道的人:请记得将该文件放置在 ~/.local/share/applications 中,以便 Gnome 桌面看到它,扫描它并在全局菜单系统中为您的应用程序创建菜单/图标条目。此外,除非您的应用程序支持它,否则您可能不需要 StartupNotify=true。https://developer.gnome.org/integration-guide/stable/startup-notification.html.en - abulka

1

针对Linux(Ubuntu):

  1. 降级Electron包:

    npm install electron@3.1.6 --save-dev

全局设置(如有需要)

npm install -g electron@3.1.6
  1. 执行electron-packager命令 - 适用于Linux:

    electron-packager . electron-tutorial-app --overwrite --asar --platform=linux --arch=all --prune=true --out=release-builds

这将生成4个Linux文件夹(arch=all)。根据您的操作系统选择一个可工作的可执行文件。


3
降级 Electron 可能会错过许多功能和错误修复,只有在特殊情况下才应考虑这么做。 - snwflk

0

当使用electron-packager打包一个 Linux 应用程序时,会出现问题,其 Electron 版本为 4.0.x,而以前的 Electron 版本(如 3.1.x)没有问题。

由于某种原因,在 Electron 4.0.x 中,生成的应用文件是一个共享库(shared library),而不是可执行文件(executable)。

在终端窗口中,运行应用文件路径上的 file 命令会显示:

ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=b9e8ba37118dad1bf605affef41026f813215bc6, stripped

而以前则是:

ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, stripped

幸运的是,虽然有些麻烦,但仍然可以通过从终端窗口启动应用程序来运行它,例如将应用程序文件图标拖到终端提示符上,然后输入回车。


1
谢谢,@Mikaeru,你的回答让我降级了电子版本,并在electron-packager实用程序中使用其他参数进行构建。这至少适用于Ubuntu Linux。所以,现在也在尝试Windows机器。将随后更新。 - Catalyst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接