场景: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)