electron 如何获取文件路径时打开它与电子应用程序

eivnm1vs  于 9个月前  发布在  Electron
关注(0)|答案(1)|浏览(198)

我正在制作一个具有自定义文件扩展名的应用程序。我完成了文件的阅读和写入,并在Mac上双击打开文件,但我找不到一种方法来使双击给予回Windows上的绝对路径。我使用电子构建器,因此传递的所有参数都不同
以下是我在MacOS上解决的方法:
main.js:

...
if (process.platform === "darwin") {
  app.on('open-file', (event, path) => {
    event.preventDefault();
    ipcMain.handle("getSource", function() {
      return path;
    })
  });
}

字符串
preload.js:

window.addEventListener('DOMContentLoaded', async () => {
...
let path;

    if (process.platform === "darwin") {

        const ipcRenderer = require('electron').ipcRenderer;

        path = await ipcRenderer.invoke("getSource")

    }
    if (process.platform === "win32") {
        path = process.argv[1]
    }

    gui_console.value = path
...
}


我尝试了process.argv[1],因为许多其他帖子建议,它给了我别的东西。事实上,process甚至不包含文件的路径appearantly(我发现这是通过打印它到一个textarea和复制文本到一个json文件)。我看到一个帖子的解决方案说,require("electron").remote.process.argv[1]将工作,但过了一段时间,我意识到这是一样的。

acruukt9

acruukt91#

文件路径确实在process.argv中,除了你必须从main进程而不是preload获取它。我在文档中找不到任何提到args的值在进程之间是不同的,但在open-file文档中提到(强调我的):
在Windows上,您必须解析process.argv在主进程中)以获取文件路径。
另外,如果你不想依赖参数的索引来获取路径,并且你知道你正在寻找的文件的扩展名,你可以使用find,例如:

ipcMain.handle("getSource", () => {
  if (!app.isPackaged) return null;
  return process.argv.find(arg => arg.endsWith(".customExt"));
});

字符串

相关问题