主要使用node的子进程来执行脚本命令

//使用第三方包来获取管理员权限
const sudoPrompt = require('@vscode/sudo-prompt');
const path = require('path');

const execRun = cmd => {
  return new Promise((resolve, reject) => {
    console.log('execRun ~ cmd', cmd);
    sudoPrompt.exec(cmd, { name: 'Electron Runas Admin' }, (error, stdout, stderr) => {
      if (error) {
        reject(error);
      } else {
        resolve(stdout.toString());
      }
    });
  });
};

// 启动服务
async function doSomeThing() {
  try {	
		//脚本文件所在的父级目录
    const startPwd = path.resolve(__dirname, '../extraResources/server');
    // 由于系统限制,在C:Program Files目录下不能直接读取到bat脚本,所以为了兼容需要先进行cd操作,再执行脚本
    let cdDirPath = `cd /d ${startPwd} & start.bat`;
    const startCommand = await execRun(cdDirPath);
    console.log('openServer ~ mongoCommand', startCommand);
  } catch (error) {
    console.log(error);
    console.log('打开服务失败');
  }
}

module.exports = {
  doSomeThing,
};

有个需要注意的地方,如果脚本所在的目录是在 C:\Program Files 目录下,如果不做处理,直接运行脚本,在有些windows电脑上会报错,这里提供一个解决办法是先切到脚本的父级目录,然后再执行脚本,这样能兼容所有windows电脑,保证脚本正确执行