windows系统上exe程序看门狗

本案例实现监控一个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()

 




 

posted @ 2020-08-25 17:47  573156440  阅读(805)  评论(0编辑  收藏  举报