sheen573156440
本案例实现监控一个exe的windows应用是否在运行,如果没有在运行就启动起来的功能。 项目目录结构:

 

 


一、配置文件setting.json
{"cubePath": "C:\\Users\\gx771\\Desktop\\Cube\\electron\\Cube\\20200716\\Cube-win32-x64\\cube.exe","spaceTime": "20000","serviceName": "cubeWatcher"}


二、后端index.js脚本 每20s查询一次cube.exe程序是否正在运行,若没有运行,则启动
fs = require \'fs\'
path = require \'path\'
settingPath = path.resolve(__dirname, \'./setting.json\')
data = fs.readFileSync settingPath, \'utf-8\'
setting = JSON.parse data
console.log \'setting:\',setting

cubeFlag = 0  # cube.exe程序运行状态标记 0未运行 1运行
cubePath = setting?.cubePath     # cube.exe的执行程序路径
spaceTime = setting?.spaceTime      # 每隔20s检查一遍cube的进程是否还在
startTime = Date.now() # 当前时间

# 启动cube.exe程序
exec = require(\'child_process\').execFile
fun =  ()=>
  console.log \'fun() start\'
  exec(cubePath, [\'/t\', \'600\'],(err,data)->
    console.log \'err\',err
    console.log \'启动cube后的数据:\', data.toString()
  )

#定时检查cube的状态并更新flag标记,flag为0则执行启动cube.exe的方法
changeStatus = (flag)->
#  console.log \'---------cube.exe运行状态:\',flag
  if flag == 0
    console.log \'重启\'
    fun()
  else
    console.log \'不重启\'

# 定时检查cube.exe是否在运行
exec = require(\'child_process\').exec
isRunning = (query,cb)=>
    platform = process.platform;
    cmd = \'\';
    switch platform
      when \'win32\'
        cmd = "tasklist"
        break
    exec(cmd, (err, stdout, stderr)=>
      status = stdout.toLowerCase().indexOf(query.toLowerCase()) > -1
      cb(status)
    )

checkStatus = (startTime)=>
  timeNow = Date.now()
#  console.log(\'当前时间\'+timeNow+\'|| 时差:\'+(timeNow-startTime))
  isRunning(\'Cube.exe\',(status)=>
    console.log \'status\',status
    if status is true
      cubeFlag = 1
      console.log \'--运行中 无需重启--\'
    else if status is false
      console.log \'--未运行 需要启动--\'
      cubeFlag = 0
      changeStatus(cubeFlag)
  )
myInterval = setInterval(checkStatus,spaceTime,startTime);

 



三、wd.js把index.js的看门狗脚本注册为windows服务

Service = require(\'node-windows\').Service
path = require \'path\'
fs = require \'fs\'

settingPath = path.resolve(__dirname, \'./setting.json\')
data = fs.readFileSync settingPath, \'utf-8\'
setting = JSON.parse data
console.log \'setting-wd:\',setting

svc = new Service({
  name: setting?.serviceName
  description: setting?.serviceName
  script: path.resolve(__dirname, \'./index.js\')  #nodejs项目要启动的文件路径
#  script: \'C:\\Users\\gx771\\Desktop\\微魔方\\electron包\\Cube\\20200716上午11点\\Cube-win32-x64\\cube.exe\'
})
svc.on \'install\',()=>
  svc.start()
svc.install()
四、wd-uninstall.js注销index.js看门狗脚本的服务

Service = require(\'node-windows\').Service
path = require \'path\'
fs = require \'fs\'

settingPath = path.resolve(__dirname, \'./setting.json\')
data = fs.readFileSync settingPath, \'utf-8\'
setting = JSON.parse data
console.log \'setting-uninstall:\',setting
svc = new Service({
  name: setting?.serviceName
  description: setting?.serviceName
  script: path.resolve(__dirname, \'./index.js\')  #nodejs项目要启动的文件路径
#  script: \'C:\\Users\\gx771\\Desktop\\微魔方\\electron包\\Cube\\20200716上午11点\\Cube-win32-x64\\cube.exe\'
})
svc.on \'uninstall\',()->
  console.log \'Uninstall complete.\'
  console.log \'The service exists:\',svc.exists
svc.uninstall()

 




 

分类:

技术点:

相关文章:

  • 2022-01-07
  • 2021-12-29
  • 2021-10-22
  • 2022-01-07
  • 2022-12-23
  • 2021-05-15
  • 2021-11-24
猜你喜欢
  • 2022-01-07
  • 2022-02-07
  • 2022-01-07
  • 2022-01-07
  • 2021-04-11
  • 2021-06-20
  • 2022-01-07
相关资源
相似解决方案