我正在使用 Electron 开发桌面应用程序。我在单独的进程中执行某些任务,以避免锁定渲染器进程。我通过调用 require('child_process').fork 来实现这一点。这在所有平台(linux、windows、osx)上都能按预期工作。但是,当我使用 Electron-builder 打包应用程序并安装生成的 NSIS 安装程序并执行安装的二进制文件时,fork 失败。我已经从命令行启动了这个二进制文件,以便查看任何错误输出,但这没有帮助。发生这种情况时,派生子进程的父进程将获得 exit
回调,退出代码为 1。这只是 NSIS 安装程序安装的可执行文件的问题。如果我使用 --dir
选项运行 electron-builder
并从解压的目录中运行可执行文件,则它可以正常工作。
这让我相信这与安装程序对可执行文件设置的权限有关。我已经尝试了权限,但没有成功。我不确定哪些权限负责允许/阻止此行为。
最佳答案
我发现了这个问题。它与可执行文件权限或 asar 打包无关。
据我所知,问题在于我打包 native 模块的方式。 fork 进程正在加载 native 模块。但在打包时我只选择打包 build/
目录,以避免分发专有源代码。这导致 fork 进程失败。当我开始将 native 模块的 package.json
文件与 build/
目录一起打包时, fork 进程正确运行。
关于node.js - 仅从已安装的可执行文件在 Windows 上从 Electron 进程 fork 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41332009/