中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [解决] 软件不稳定 想弄条命令来检测它是否开启
作者:
标题: [解决] 软件不稳定 想弄条命令来检测它是否开启 上一主题 | 下一主题
kennyfan
中级用户




积分 259
发帖 112
注册 2006-9-18
状态 离线
『楼 主』:  [解决] 软件不稳定 想弄条命令来检测它是否开启

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

[ Last edited by kennyfan on 2006-9-22 at 09:57 ]

2006-9-22 08:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 2 楼』:  


tasklist | findstr /i "xxx.exe" >nul 2>nul && start "c:\program~1\xxx\xxx.exe"
把它放到循环中即可。

2006-9-22 08:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kennyfan
中级用户




积分 259
发帖 112
注册 2006-9-18
状态 离线
『第 3 楼』:  

呵呵....谢谢咯.先试试~`

2006-9-22 09:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 4 楼』:  

循环太占内存,用at 好点

2006-9-22 09:06
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
kennyfan
中级用户




积分 259
发帖 112
注册 2006-9-18
状态 离线
『第 5 楼』:  未解决 软件不稳定 想弄条命令来检测它是否开启

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

[ Last edited by kennyfan on 2006-9-22 at 09:18 ]

2006-9-22 09:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 6 楼』:  

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



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-22 09:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
kennyfan
中级用户




积分 259
发帖 112
注册 2006-9-18
状态 离线
『第 7 楼』:  

将它改为|| 还是会不断跳出新的CMD窗口哦!

2006-9-22 09:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 8 楼』:  

tasklist | findstr /i "name.exe" >nul 2>nul || start "" "path\name.exe"

呵呵~ 改了下, 看可不可以!



业精于勤而荒于嬉,形成于思而毁于随。
2006-9-22 09:44
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 9 楼』:  

  可能是你的软件实在太不稳定了,刚开就退出来了吧。把start去掉再试试。或者把start语句改成 start "" "c:\program~1\xxx\xxx.exe"。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-22 09:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
kennyfan
中级用户




积分 259
发帖 112
注册 2006-9-18
状态 离线
『第 10 楼』:  

OK 不会重新弹出了.可是 问题又来了..关闭软件后 BAT程序也停止操作!~~晕

2006-9-22 09:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kennyfan
中级用户




积分 259
发帖 112
注册 2006-9-18
状态 离线
『第 11 楼』:  

呵呵.解决了.原来自己的循环出现了问题!~
谢谢各位.!~ 如 4楼所说的的确占用了不少内存  不敢随便用 2,468K 比我那个不稳定的程序还要多,

[ Last edited by kennyfan on 2006-9-22 at 10:01 ]

2006-9-22 09:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 12 楼』:  



  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秒。

2006-9-22 10:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kennyfan
中级用户




积分 259
发帖 112
注册 2006-9-18
状态 离线
『第 13 楼』:  

哇.有点复杂..虽然暂时看不明白不过先收下.谢谢啊!!~

2006-9-22 11:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 14 楼』:  

我说的用at 是,当前bat结束的时候添加一个at ,你可以自己定义 下次 at 启动的时间,就相当于你弄个每10m 检查一次

2006-9-29 01:41
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: