Electron系列之,启动后台服务

本文介绍了如何在 Electron 应用程序中通过命令行启动后台服务的两种方法,包括使用 `start` 命令和直接调用 `exe` 文件。详细阐述了`package.json`配置、服务端文件的组织以及使用`child_process`模块的`exec`和`spawn`方法来启动、监控服务,并提供了关闭后台服务的实现。内容涵盖了启动服务的日志输出和错误处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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



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

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. 服务端文件

在这里插入图片描述

3. 效果

在这里插入图片描述

二、直接使用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("后台服务已关闭...")   
    })
  }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值