问题描述:
客户要求windows客户端在宕机时能自动重启,不需要人为去手动重新开启。
想法:
1、通过客户端代码增加守护进程的方法实现,但是之前windows下没有过相关经验;
2、通过脚本的方法实现;
实现:
1、start.bat
测试客户端名称为ISMClient.exe,安装目录为 C:\ISMClient\ISMClient.exe(最好不要有中文)。
运行时如果检查到有ISMClient.exe在运行,则算成自己的进程名,如果进程宕了就过会自动重启(会在当前目录下生成一个start1.bat)
注意:红色部分可根据自己的需求修改。
见代码(start.bat)
@echo off
set _task=ISMClient.exeset _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进程;
本文是整理参考网上的代码实现的,在此对原文、源代码的作者表示感谢。