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