electron集成第三方视频会议(整个目录资源含exe)进来,开发/打包坑点集锦
场景:electron做个welink那种会议功能,需要集成第三方去进入会议,需要做的是在electron里面打开这个通道
对方给了一个文件夹,里面含有.exe,需要调用shell命令去打开这个exe传些参数
1.把整个会议文件夹放在/resources下
主要是记住三个环境变量的路径方法(因为在electron中所以得看electron的api)
app.isPackaged //代表是否是打包的 app.getAppPath() //开发环境直接到项目工程的*/electron app.getPath('exe')//这是指向打包后的路径到项目开启的*/程序.exe process.resourcesPath //这个路径会指向资源文件resources 调试需要在日志文件中去调试
function initMeetting(){ logger.info('[ 进入会议方法中1 ]',app.getAppPath()) const resourcesPath = process.resourcesPath; logger.info('[ 进入会议方法中1-2 ]',resourcesPath) let thirdPartyDir = './resources/hst_meetting/FastMeeting.exe'; let executablePath = join(app.getAppPath(), thirdPartyDir); let buildPath = join(process.resourcesPath, './hst_meetting/FastMeeting.exe'); logger.info('[ 进入会议方法中1-3 ]',buildPath) let path:string = app.isPackaged ? buildPath : executablePath; //定义shell命令参数 let uname = '**'; let unameValue = '*'; let shellCommand = `start ${path} ${uname} ${unameValue}`; // 执行 shell 命令 logger.info('[ 进入会议方法中 ]',shellCommand ) exec(shellCommand, (error, stdout, stderr) => { if (error) { logger.info('[ 进入会议方法中2 ]',error) console.error(`Error executing command: ${error}`); return; } logger.info('[ 进入会议方法中3 ]',stdout) logger.info('[ 进入会议方法中4 ]',stderr) console.log(`stdout: ${stdout}`); console.error(`stderr: ${stderr}`); }); }
import { exec } from 'child_process';
需要注意的是exec在node.js中可以用相对路径去打开shell文件,但是在electron中只能用绝对路径打开(相对路径试了下没试出来)
打包配置需要注意electron-builder.yml
https://cn.electron-vite.org/guide/distribution
extraResources: - from: resources/hst_meetting to: hst_meetting asarUnpack: - resources/** - hst_meetting/**
asarUnpack代表的是打包不加密,原文件
extraResources是打包额外资源配置项,配置extraResources
后,electron-builder
在打包时会将指定文件夹复制到打包后应用程序的根目录/resources文件夹下
(Windows),或者Content/resources文件夹下
(MacOS)