您的位置:首页 > 编程语言 > VB

Windows下通过bat批处理文件和vbs脚本实现守护进程

2017-10-27 16:26 931 查看
问题描述:

客户要求windows客户端在宕机时能自动重启,不需要人为去手动重新开启。

想法:

1、通过客户端代码增加守护进程的方法实现,但是之前windows下没有过相关经验;

2、通过脚本的方法实现;

实现:

1、start.bat

测试客户端名称为ISMClient.exe,安装目录为
C:\ISMClient\ISMClient.exe(最好不要有中文)。

运行时如果检查到有ISMClient.exe在运行,则算成自己的进程名,如果进程宕了就过会自动重启(会在当前目录下生成一个start1.bat)
注意:红色部分可根据自己的需求修改。

见代码(start.bat)

@echo off
set _task=ISMClient.exe
set _svr=C:\ISMClient\ISMClient.exe
set _des=start1.bat
 :checkstart
SET status=1 
(TASKLIST|FIND /I "%_task%"||SET status=0) 2>nul 1>nul
ECHO %status%
IF %status% EQU 1 (goto checkag ) ELSE (goto startsvr)

:startsvr
echo %time% 
echo ********程序开始启动********
echo 程序重新启动于 %time% ,请检查系统日志 >> restart_service.txt
echo start %_svr% > %_des%
echo exit >> %_des%
start %_des%
set/p=.<nul
for /L %%i in (1 1 10) do set /p a=.<nul&ping.exe /n 2 127.0.0.1>nul
echo .
echo Wscript.Sleep WScript.Arguments(0) >%tmp%\delay.vbs 
cscript //b //nologo %tmp%\delay.vbs 10000 
del %_des% /Q
echo ********程序启动完成********
goto checkstart

:checkag
echo %time% 程序运行正常,10秒后继续检查.. 
echo Wscript.Sleep WScript.Arguments(0) >%tmp%\delay.vbs 
cscript //b //nologo %tmp%\delay.vbs 10000 
goto checkstart

运行start.bat批处理文件,已经可以实现功能了。但是其cmd运行窗口一直显示,看起来肯定不舒服。所以需要想办法将其隐藏,这里采用vbs脚本(见第2点)。

2、start.vbs

start.vbs比较简单,直接见代码吧。

Set ws = CreateObject("Wscript.Shell")

ws.run "cmd /c D:\start.bat",vbhide

注意: D:\start.bat 为第1点中批处理文件的存放地址(最好不要有中文)

运行start.vbs,题述功能可以实现了。

顺便提一句,由于cmd窗口被隐藏了,新手可能不知道从哪里去关闭上面的操作,现提供一个比较粗犷的方法吧。

(1)打开任务管理器,结束wscript.exe进程;

(2)打开任务管理器,结束cmd.exe进程;

本文是整理参考网上的代码实现的,在此对原文、源代码的作者表示感谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息