当前位置: 首页 > news >正文

解决Elctron打包成功,IPC无法注册问题。

目录
  • 解决Elctron打包成功,IPC无法注册问题。
  • 项目地址

解决Elctron打包成功,IPC无法注册问题。

核心问题原因

  1. IPC 处理程序未注册:主进程未注册 'resource:scanDirectory'通道的处理程序
  2. 注册时序问题:处理程序注册可能晚于渲染进程的 IPC 调用
  3. 模块加载失败registerResourceIpcHandlers()函数未被正确导入或执行

核心代码

ipcRegister.js

// 静态导入,确保构建工具能识别
import { registerFileSystemIpcHandlers } from '../../ipcHandlers/fileSystemHandler.js'
import { registerResourceIpcHandlers } from '../../ipcHandlers/resourceHandler.js'const handlers = [{ name: 'FileSystem', register: registerFileSystemIpcHandlers },{ name: 'Resource', register: registerResourceIpcHandlers }
]export async function registerAllIpcHandlers() {for (const handler of handlers) {try {await handler.register()console.log(`✅ ${handler.name} IPC 处理程序注册成功`)} catch (error) {console.error(`🛑 注册 ${handler.name} 失败:`, error)throw new Error(`IPC 注册失败: ${handler.name} - ${error.message}`)}}console.log('🎉 所有 IPC 处理程序注册完成')
}

main/index.js

import { app } from 'electron'
import { electronApp, optimizer } from '@electron-toolkit/utils'
import { setupAppLifecycle } from './modules/appLifecycle.js'
import { registerAllIpcHandlers } from './modules/ipcRegister.js'
import { createWindow } from './modules/windowManager.js'// 当 Electron 完成初始化时触发
app.whenReady().then(async () => {// 1. 设置应用用户模型 ID (主要用于 Windows)electronApp.setAppUserModelId('com.electron')// 2. 设置窗口快捷键监听 (如 F12 开发者工具)app.on('browser-window-created', (_, window) => {optimizer.watchWindowShortcuts(window)})// 3. 注册所有 IPC 处理程序await registerAllIpcHandlers()// 4. 创建主浏览器窗口createWindow()// 5. 设置应用激活时的行为 (主要用于 macOS)setupAppLifecycle()
})// 当所有窗口都关闭时触发
app.on('window-all-closed', () => {// 在 macOS 上,应用程序和它们的菜单栏通常会保持活动状态,// 直到用户明确退出(Cmd+Q)。if (process.platform !== 'darwin') {app.quit()}
})

src/renderer/index.html

<!doctype html>
<html>
<head><meta charset="UTF-8"/><title>数据标注</title><!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --><!--    <meta--><!--      http-equiv="Content-Security-Policy"--><!--      content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:"--><!--    />-->
</head><body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>

项目地址

electron本地连接mysql数据库项目模板,解决ipc注册问题、prismaclient加载问题

http://www.jsqmd.com/news/42075/

相关文章:

  • Swagger开启账号验证访问
  • 标准解读——GB/T 46353—2025《信息技术 大数据 资料资产价值评估》国家标准
  • noip7
  • 代码背后的故事:docker容器名生成算法
  • 在Windows系统置顶窗口不被Win+D快捷键影响
  • HTTP请求走私漏洞介绍 - 实践
  • 20232428 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • xml.etree.ElementTree 完全支持嵌套查找子元素,且有多种简洁实用的方式。
  • 深入解析:Spring MVC 拦截器interceptor
  • HarmonyOS 5 鸿蒙Context上下文机制与资源管理详解 - 教程
  • 《重生之我成为世界顶级黑客》第八章:未来野望
  • 打开工作空间时,但未在 DTD/架构中声明
  • 开源软件的崛起:技术共享与协作创新的新时代 - 详解
  • 20232418 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • Claude Code教程:从零构建AutoPost GPT自动内容生成系统
  • MFC + OpenCV 图像预览显示不全中断问题解除:GDI行填充详解
  • python多进程 —— multiprocessing.Manager —— 跨主机共享内存的读写
  • AT_agc063_e Child to Parent 题解
  • 3天掌握OpenHarmony+Python开发:高效适配教程与真实项目案例精讲 - 教程
  • 飞牛os打开本机usb摄像头
  • CF 2156E Best Time to Buy and Sell Stock
  • 《重生之我成为世界顶级黑客》第七章:成功了,但没完全成功
  • 12306售票系统分析与实战
  • Java StringTokenizer 类 Scanner 类详解
  • Java 断言(Assert) 简介
  • 2025年中小学生 AI 学习机选购指南:松鼠 AI 双线模式成优选
  • 《重生之我成为世界顶级黑客》第六章:一线生机
  • 20232305 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 遥感建筑物变化检测内容集
  • 实用指南:IntelliJ IDEA 2023中为 Spring Boot 项目添加注释模板