中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-02 03:37
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [解决] 软件不稳定 想弄条命令来检测它是否开启 查看 1,156 回复 13
楼 主 [解决] 软件不稳定 想弄条命令来检测它是否开启 发表于 2006-09-22 08:49 ·  中国 广东 广州 天河区 电信
中级用户
★★
积分 259
发帖 112
注册 2006-09-18 04:55
19年会员
UID 62928
性别 男
状态 离线
我有只软件挺不稳定.经常自动关闭
我想弄条批处理来检测它是否关闭 如果关闭了,要它开启
用 IF EXIST 应该可以完成吧? 但还是不知道怎么写!
还请各位老兄 老姐 帮帮忙

[ Last edited by kennyfan on 2006-9-22 at 09:57 ]
2 发表于 2006-09-22 08:56 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
tasklist | findstr /i "xxx.exe" >nul 2>nul && start "c:\program~1\xxx\xxx.exe"

把它放到循环中即可。
3 发表于 2006-09-22 09:03 ·  中国 广东 广州 天河区 电信
中级用户
★★
积分 259
发帖 112
注册 2006-09-18 04:55
19年会员
UID 62928
性别 男
状态 离线
呵呵....谢谢咯.先试试~`
4 发表于 2006-09-22 09:06 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
循环太占内存,用at 好点
5 未解决 软件不稳定 想弄条命令来检测它是否开启 发表于 2006-09-22 09:16 ·  中国 广东 广州 天河区 电信
中级用户
★★
积分 259
发帖 112
注册 2006-09-18 04:55
19年会员
UID 62928
性别 男
状态 离线
不行哦.用start 的话会不停弹出CMD窗口 用at怎么用? 能写出代码来吗?

[ Last edited by kennyfan on 2006-9-22 at 09:18 ]
6 发表于 2006-09-22 09:34 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  3742668版主在第二楼的代码有个地方写反了,应该把&&换成||就不会不断地启动软件了。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
7 发表于 2006-09-22 09:41 ·  中国 广东 广州 天河区 电信
中级用户
★★
积分 259
发帖 112
注册 2006-09-18 04:55
19年会员
UID 62928
性别 男
状态 离线
将它改为|| 还是会不断跳出新的CMD窗口哦!
8 发表于 2006-09-22 09:44 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
20年会员
UID 58987
来自 湖南.娄底
状态 离线
tasklist | findstr /i "name.exe" >nul 2>nul || start "" "path\name.exe"

呵呵~ 改了下, 看可不可以!
业精于勤而荒于嬉,形成于思而毁于随。
9 发表于 2006-09-22 09:46 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  可能是你的软件实在太不稳定了,刚开就退出来了吧。把start去掉再试试。或者把start语句改成 start "" "c:\program~1\xxx\xxx.exe"。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
10 发表于 2006-09-22 09:53 ·  中国 广东 广州 天河区 电信
中级用户
★★
积分 259
发帖 112
注册 2006-09-18 04:55
19年会员
UID 62928
性别 男
状态 离线
OK 不会重新弹出了.可是 问题又来了..关闭软件后 BAT程序也停止操作!~~晕
11 发表于 2006-09-22 09:54 ·  中国 广东 广州 天河区 电信
中级用户
★★
积分 259
发帖 112
注册 2006-09-18 04:55
19年会员
UID 62928
性别 男
状态 离线
呵呵.解决了.原来自己的循环出现了问题!~
谢谢各位.!~ 如 4楼所说的的确占用了不少内存 不敢随便用 2,468K 比我那个不稳定的程序还要多,

[ Last edited by kennyfan on 2006-9-22 at 10:01 ]
12 发表于 2006-09-22 10:54 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
3742668版主在第二楼的代码有个地方写反了,应该把&&换成||就不会不断地启动软件了。

低级错误,谢谢指正。
谢谢各位.!~ 如 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秒。
13 发表于 2006-09-22 11:12 ·  中国 广东 广州 天河区 电信
中级用户
★★
积分 259
发帖 112
注册 2006-09-18 04:55
19年会员
UID 62928
性别 男
状态 离线
哇.有点复杂..虽然暂时看不明白不过先收下.谢谢啊!!~
14 发表于 2006-09-29 01:41 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
我说的用at 是,当前bat结束的时候添加一个at ,你可以自己定义 下次 at 启动的时间,就相当于你弄个每10m 检查一次
论坛跳转: