将参数传递给正在运行的电子应用程序

时间:2019-03-20 19:13:53

标签: electron

我发现了一些有关使用app.makeSingleInstance和CLI参数的搜索结果,但似乎该命令已被删除。

还有其他方法可以将字符串发送到已经启动的电子应用程序吗?

2 个答案:

答案 0 :(得分:1)

一种策略是让您的外部程序写入电子应用程序知道的文件。然后,您的电子应用程序可以侦听对该文件的更改并可以读取该文件以获取字符串:

import fs

fs.watch("shared/path.txt", { persistent: false }, (eventType: string, fileName: string) => {
    if (eventType === "change") {
        const myString: string = fs.readFileSync(fileName, { encoding: "utf8" });
    }
});

为简单起见,我使用了同步readFileSync,但您可能要考虑异步版本。

第二,您需要考虑这种外部应用编写如此迅速的情况,以至于fs.watch回调可能仅在两次写入中被触发一次。您能错过更改吗?

否则,我不认为有电子方式可以从外部应用程序获取此信息。如果您能够从Electron应用程序启动外部应用程序,则可以执行cp.spawn(...)并使用其stdout管道来监听消息。

如果共享内存是Node中的一件事,那么您可以使用它,但不幸的是it's not

答案 1 :(得分:0)

最终,针对我的特定问题的最优雅的解决方案是使用koa为Electron应用添加一个http api端点。

const Koa = require("koa");
const koa = new Koa();

let mainWindow;

function createWindow() {
  let startServer = function() {
    koa.use(async ctx => {
        mainWindow.show();
        console.log("text received", ctx.request.query.text);
        ctx.body = ctx.request.query.text;
    });

    koa.listen(3456);
  };
}

现在,我可以使用以下网址轻松地从应用程序外部将文本发送到Electron:

localhost:3456?text=myText