Electron系列之,启动后台服务

通过cmd命令行启动后台服务

在electron窗体启动时调取后台服务exe文件


文章目录

  • 通过cmd命令行启动后台服务
  • 一、将服务端文件打包进安装包
    • 1、package.json文件配置
  • 二、通过start命令启动服务端exe文件
    • 1. 代码
    • 2. 服务端文件
    • 3. 效果
  • 二、直接使用exe文件名启动服务
    • 1. 使用 exec 命令启动后台服务
    • 2 . 使用 spawn 命令启动后台服务
    • 3 . 通过命令行关闭后台服务


一、将服务端文件打包进安装包

1、package.json文件配置

extraResources: {
   from: "./server",
   to: "server"
 },

二、通过start命令启动服务端exe文件

1. 代码

代码如下(示例):

// 启动后台服务
// 方案1,不需要查看输出日志
// const {exec} = require("child_process")
// function runExec(){
//   let cmdStr = "start ./server/backServer.exe"
//   exec(cmdStr,{})
// }

方案2,可以查看启动服务打印日志
let serverProcess=null;
function startServer(){
  let cmdStr = "start ./server/backServer.exe"
  runExec(cmdStr)
  function runExec(cmdStr){
    serverProcess = require('child_process').exec(cmdStr,{})
    // 启动成功的输出
    serverProcess.stdout.on("data",function(data){
      console.log("启动服务器成功! stdout:" + data) 
    })
    // 发生错误的输出
    serverProcess.stderr.on("data",function(data){
      console.log("stderr:" + data)
    })
    // 退出后的输出
    serverProcess.on("close",function(code){
      console.log("out code:" + code)
    })
  }
}

2. 服务端文件

Electron系列之,启动后台服务_第1张图片

3. 效果

Electron系列之,启动后台服务_第2张图片

二、直接使用exe文件名启动服务

1. 使用 exec 命令启动后台服务

代码如下(示例):

let serverProcess=null;
function startServer(){
  // 启动后台服务的命令
  let cmdStr = "backServer.exe"
  // 启动路径
  let cmdPath = "./server"
  // 区分测试环境与生产环境
  //   let cmdPath = isDevelopment? "./server":"./resuorces/server"
  runExec(cmdStr)

  function runExec(cmdStr){
    serverProcess = require('child_process').exec(cmdStr,{cwd:cmdPath})
    // 启动成功的输出
    serverProcess.stdout.on("data",function(data){
      console.log("启动服务器成功! stdout:" + data) 
    })
    // 发生错误的输出
    serverProcess.stderr.on("data",function(data){
      console.log("stderr:" + data)
    })
    // 退出后的输出
    serverProcess.on("close",function(code){
      console.log("out code:" + code)
    })
  }
}

2 . 使用 spawn 命令启动后台服务

推荐使用spawn命令

let serverProcess=null;
function startServer(){
  // 启动后台服务的命令
  let cmdStr = "backServer.exe"
  // 启动路径
  let cmdPath = "./server"
  // 区分测试环境与生产环境
  //   let cmdPath = isDevelopment? "./server":"./resuorces/server"
  runExec(cmdStr)

  function runExec(cmdStr){
  // 在启动后台服务前闲检测关闭一遍后台服务,防止开启多个后台服务
  	stopServer();
    serverProcess = require('child_process').spawn(cmdStr,{cwd:cmdPath})
    // 启动成功的输出
    serverProcess.stdout.on("data",function(data){
      console.log("启动服务器成功! stdout:" + data) 
    })
    // 发生错误的输出
    serverProcess.stderr.on("data",function(data){
      console.log("stderr:" + data)
    })
    // 退出后的输出
    serverProcess.on("close",function(code){
      console.log("out code:" + code)
    })
  }
}

3 . 通过命令行关闭后台服务

// 关闭后台服务
function stopServer(){
  const kill = require("tree-kill")
  if(serverProcess){   
    logger.info("kill server process , serverProcess.pid-->",serverProcess.pid);

    kill(serverProcess.pid,"SIGTERM",function(){
      serverProcess = null;  
      logger.info("后台服务已关闭...")   
    })
  }
}

你可能感兴趣的:(electron,前端,node.js)