Board logo

标题: [解决] 软件不稳定 想弄条命令来检测它是否开启 [打印本页]

作者: kennyfan     时间: 2006-9-22 08:49    标题: [解决] 软件不稳定 想弄条命令来检测它是否开启

我有只软件挺不稳定.经常自动关闭
我想弄条批处理来检测它是否关闭 如果关闭了,要它开启
用 IF EXIST 应该可以完成吧? 但还是不知道怎么写!
还请各位老兄 老姐 帮帮忙

[ Last edited by kennyfan on 2006-9-22 at 09:57 ]
作者: 3742668     时间: 2006-9-22 08:56

tasklist | findstr /i "xxx.exe" >nul 2>nul && start "c:\program~1\xxx\xxx.exe"
把它放到循环中即可。
作者: kennyfan     时间: 2006-9-22 09:03
呵呵....谢谢咯.先试试~`
作者: vkill     时间: 2006-9-22 09:06
循环太占内存,用at 好点
作者: kennyfan     时间: 2006-9-22 09:16    标题: 未解决 软件不稳定 想弄条命令来检测它是否开启

不行哦.用start 的话会不停弹出CMD窗口 用at怎么用? 能写出代码来吗?

[ Last edited by kennyfan on 2006-9-22 at 09:18 ]
作者: namejm     时间: 2006-9-22 09:34
  3742668版主在第二楼的代码有个地方写反了,应该把&&换成||就不会不断地启动软件了。
作者: kennyfan     时间: 2006-9-22 09:41
将它改为|| 还是会不断跳出新的CMD窗口哦!
作者: pengfei     时间: 2006-9-22 09:44
tasklist | findstr /i "name.exe" >nul 2>nul || start "" "path\name.exe"

呵呵~ 改了下, 看可不可以!
作者: namejm     时间: 2006-9-22 09:46
  可能是你的软件实在太不稳定了,刚开就退出来了吧。把start去掉再试试。或者把start语句改成 start "" "c:\program~1\xxx\xxx.exe"。
作者: kennyfan     时间: 2006-9-22 09:53
OK 不会重新弹出了.可是 问题又来了..关闭软件后 BAT程序也停止操作!~~晕
作者: kennyfan     时间: 2006-9-22 09:54
呵呵.解决了.原来自己的循环出现了问题!~
谢谢各位.!~ 如 4楼所说的的确占用了不少内存  不敢随便用 2,468K 比我那个不稳定的程序还要多,

[ Last edited by kennyfan on 2006-9-22 at 10:01 ]
作者: 3742668     时间: 2006-9-22 10:54


  Quote:
3742668版主在第二楼的代码有个地方写反了,应该把&&换成||就不会不断地启动软件了。

低级错误,谢谢指正。

  Quote:
谢谢各位.!~ 如 4楼所说的的确占用了不少内存  不敢随便用 2,468K 比我那个不稳定的程序还要多,

其实这种事情用VBS脚本要比用批处理脚本要更适合一些:
Set objShell = CreateObject("WScript.Shell")
strProcess = "cmd.exe"
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colMonitoredProcesses = objWMIService. _
    ExecNotificationQuery("select * from __instancedeletionevent " _
            & "within 1 where TargetInstance isa 'Win32_Process'")
Do While True
    Set objLatestProcess = colMonitoredProcesses.NextEvent
    If  objLatestProcess.TargetInstance.Name = strProcess Then
        objShell.Run "c:\windows\system32\cmd.exe"
    End If
Loop
保存上面的代码为 进程守护.vbs后运行,它的作用为如果结束cmd.exe进程,则自动启动cmd.exe,当然,前提是cmd.exe已经启动,或者可以把倒数第三行拷贝添加到第二行,则可以每次直接运行该脚本自动运行cmd.exe并进行守护。
注意:如果被守护的进程在1秒内连续被结束的话,将不会自动启动进程,如果对时间有特殊的要求可以修改 within后面的数值,单位为秒,例如within 0.1表示0.1秒,within 5表示5秒。
作者: kennyfan     时间: 2006-9-22 11:12
哇.有点复杂..虽然暂时看不明白不过先收下.谢谢啊!!~
作者: vkill     时间: 2006-9-29 01:41
我说的用at 是,当前bat结束的时候添加一个at ,你可以自己定义 下次 at 启动的时间,就相当于你弄个每10m 检查一次