没有为通道注册处理程序-Electron IPC处理程序/调用程序



在我的电子应用程序中,我收到一个错误"EventEmitter上没有为"通道名称"注册处理程序/lib/renderer/api/ipc-renderer.ts.ipcRenderer.reinvoke(electronic/js2c/render_init.js:1163:119(";。IPC句柄未注册,并且呈现器和主进程之间的通信在Windows中未按预期工作。

当我从windows安装程序打开该应用程序时,我会看到这个问题,并且在从windows上的应用程序打开应用程序时会出现间歇性问题。

以下是我如何使用ipchandle/invoke的代码片段。

在Main.ts文件中

import {ipcMain} from 'electron';
private registerIpcChannels(ipcChannels: IpcChannelInterface[]) {
try {
for(const channel of ipcChannels) {
ipcMain.handle(channel.getName(), async (event, request) => await channel.handleInvoke(event, request))
}
} catch (err) {
log.error(`Unable to register IPC channels: ${err.message}`, err);
}
}

在Renderer.js文件中:

import electron from 'electron';
sendMessage(msg) {
let ipc = electron.ipcRenderer;
ipc.invoke(channelName, msg);
}

我不明白为什么它在MacOS上运行得很好,但在windows上却不行。我遵循文档在电子应用程序中实现handle/invoke。环境信息:Electron-v8.5.2Nodejs-v12.16.1操作系统-Windows 10

注意:这种情况仅在首次发布时发生。刷新或退出并重新打开应用程序后,它工作正常

有人能帮忙弄清楚为什么会出现这个问题吗?

我也遇到了同样的问题。我的问题是,在我的IPC处理程序被注册之前,我指示electronic导航到我的应用程序。它只发生在第一次加载时,而不是随后的加载/重新加载(和热重新加载(,原因是BrowserWindow正在重新创建,我的IPC处理程序已经注册(并在我的代码中重新注册(。

因此,请确保在BrowserWindow加载调用IPC通道的渲染器代码之前,您的处理程序已经注册。

注意:这种情况仅在首次启动时发生。刷新或退出并重新打开应用程序后,工作正常

这是因为一旦你发射电子,它就会在主过程中使用保存的设置和代码如果您在主流程中更改代码,则必须退出应用程序并重新启动以实现在主流程代码中所做的更改

我希望以上信息能节省一些时间!

句柄应放在创建主窗口之前;

相关内容

最新更新