[electron]开发环境驱动识别失败
记一次错误回顾,在硬件调试阶段初始化需要加载驱动文件,我把驱动文件放在根目录的bin文件夹下。在开发环境里始终无法识别,而在打包构建后识别正常。
排除了bin路径不对(我已传入绝对路径并判断文件是否存在
const dllPath = this.findLibSignPath();MyLog.log("dllPath:", dllPath);// 检查DLL文件是否存在if (!require("fs").existsSync(dllPath)) {MyLog.error("DLL文件不存在:", dllPath);return { success: false, message: `DLL文件不存在: ${dllPath}` };}
也将驱动路径加入到path变量里
// 将DLL所在目录添加到PATH环境变量中,这样TabletDriver就能找到DLLconst dllDir = path.dirname(dllPath);const currentPath = process.env.PATH || "";if (!currentPath.includes(dllDir)) {process.env.PATH = `${dllDir};${currentPath}`;MyLog.log("已将DLL目录添加到PATH:", dllDir);}
也用管理员的方式启动了vscode
同时用Dependencies
工具检查了dll文件,没有依赖第三方dll。
甚至在初始化的时候设置process.chdir(path.dirname(dllPath));
以上方法都没用,依然在开发环境里识别失败,只有打包好后才正常。
所以问题出在window查找dll路径的问题上,在打包后dll会一并打包到exe里,所以它会直接找到。
所以我尝试将dll放到node_modules/electron/dist里,神奇的事情发生了,此时能正常识别到了。
// 开发环境加载bin/dll驱动文件会失败,也不是失败,而是驱动 DLL 内部并不是只靠你传进去的绝对路径,而是它自己还会 LoadLibrary("xxx.dll") 或做相对路径依赖解析。if (!app.isPackaged) {// 将all文件拷贝到nodule_modules/electron/dist目录下const electronDistDir = path.dirname(process.execPath);const targetPath = path.join(electronDistDir, "libSign_x64.dll");if (!fs.existsSync(targetPath)) {fs.copyFileSync(dllPath, targetPath);}}