主要使用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电脑,保证脚本正确执行