【问题标题】:File association with electron builder与电子生成器的文件关联
【发布时间】:2018-09-12 06:59:58
【问题描述】:

我正在使用 Electron 制作一个多平台应用程序,并且我正在尝试使用 electron-builder 进行文件关联。

我已将它添加到配置中并且工作正常,当我双击文件时,它会打开应用程序,这是预期的,但我不知道如何在我的电子应用程序上接收该文件,我'我用谷歌搜索,在电子生成器 repo 上查看了问题,但没有找到任何东西。到目前为止,我发现的唯一一件事是您应该将其作为自定义协议处理,如果我想从路径或 url 打开文件,这对我来说很有意义,但我不明白如何双击文件会触发自定义协议,当您双击与您的应用关联的文件时,电子是否使用定义的自定义协议?

我也没有在官方文档上找到任何东西,有什么帮助吗?

提前谢谢你。

【问题讨论】:

  • 您可以创建自定义协议以在终端和/或执行程序中打开您的应用程序,例如myapp: --params,这是您想要的吗?
  • 嗯,不是真的,我希望能够通过双击打开关联文件(例如 test.myapp),我为此使用了文件关联,但我没有看到在我的应用程序上接收文件路径的方法。我的意思是,我不想每次都输入协议来打开文件,我希望能够通过双击文件来完成。
  • 我目前也在寻找答案,虽然我不确定,但我的 猜测 是答案在于 Electron 所基于的 NodeJS API。我想通过文件类型关联启动应用程序与在传递一些参数时启动应用程序相同,因此文件路径应显示在process.argv 中。我只是还没来得及测试这个理论。
  • 遇到了这个related question,看着cmets,我的怀疑似乎是正确的。 open-file(特定于 macOS)在 NodeJS 文档中提到将 process.argv 用于 windows。

标签: javascript electron electron-builder electron-packager


【解决方案1】:

与 Electron 的文件关联与常规 Node.js 应用程序的工作方式相同:您从 process.argv array 的调用者那里获取参数。

但是,有一个窍门:当您的应用程序被打包(即在一个 asar 文件中)时,argv 与在“开发”模式下运行它时的参数数量不同。

您可以利用app.isPackage() (doc) 发挥作用:

if (app.isPackaged) {
  // workaround for missing executable argument)
  process.argv.unshift(null)
}
// parameters is now an array containing any files/folders that your OS will pass to your application
const parameters = process.argv.slice(2)

有关此here 的更多详细信息。

【讨论】:

    猜你喜欢
    • 2020-12-15
    • 2019-12-27
    • 2020-10-07
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2019-01-25
    相关资源
    最近更新 更多