中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-09 01:08
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 关于VBS监控进程脚本中遇到的路径引号替换问题 查看 1,269 回复 6
楼 主 关于VBS监控进程脚本中遇到的路径引号替换问题 发表于 2009-08-06 19:56 ·  中国 广东 肇庆 四会市 电信
中级用户
★★
积分 384
发帖 189
注册 2005-10-19 13:12
20年会员
UID 43709
性别 男
状态 离线
因需在系统进程中加载某一VBS脚本,但Wscript.exe容易让一般的人找到并结束掉,所以我需要把系统的Wscript.exe另外复制一份到C:\windows目录下,并重命名为svchost.exe,再用该svchost.exe来运行VBS脚本。

另外,我需要再写一个脚本,目的是用来检测系统进程中,svchost.exe的路径,如果没有c:\windows\svchost.exe在运行的话,则重新运行如下命令:"c:\windows\svchost.exe c:\111.vbs"。

参考了一下

http://www.cn-dos.net/forum/viewthread.php?tid=38961

这个帖子,还是无头绪,因为我对VBS是个刚入门的,在此希望各位高人指点指点,我这个监控脚本该如何去写。

要求:1、因系统中存在多个svchost.exe进程,所以该如何判断我所需要的那个进程是否存在呢?(c:\windows\svchost.exe)

2、如果存在该进程的话,脚本进入下一次循环,否则执行命令"c:\windows\svchost.exe c:\111.vbs"

3、此监控脚本必需用VBS来写

[ Last edited by voiL on 2009-8-6 at 22:21 ]
2 发表于 2009-08-06 21:31 ·  中国 广东 肇庆 四会市 电信
中级用户
★★
积分 384
发帖 189
注册 2005-10-19 13:12
20年会员
UID 43709
性别 男
状态 离线
花了我半天时间,终于有负有心人,让我找到了一个基本能实现我的要求的脚本。

但实际使用上有些出入,因为必需用这个监控脚本来启动我自己的脚本。

看能不能改成直接监控的,如果哪位坛友有更好的方法也请贴出来让大家参考一下。

还有一个问题:

dim AppPath
for each ps in getobject("winmgmts:\\.\root\cimv2:win32_process").instances_ '列出系统中所有正在运行的程序
if lcase(ps.name)=AppName then'检测程序在进程中是否存在
AppPath=ps.commandline'提取程序的命令行
AppPath1=Replace(AppPath,chr(34),space(1))'用空格替换掉字符串中的双引号这个是我自己加上去的,目的是为了把取得的路径中的双引号进行替换以便跟"allApp"比较,但我实际使用中却无法得到我想要的结果,就是因为这里把双引号替换成空格了,不知有什么方法可以把得到的路径中的双引号去掉而不是替换成空格?
end if
next



'该程序用来配合SimCode调用其他程序,并对程序的运行情况做监控,!
'监控方法是:对系统进程的监控
Set WshShell = Wscript.CreateObject("Wscript.Shell")
allApp="c:\windows\svchost.exe C:\111.vbs" '写下要调用的程序的完整路径。
AppName="svchost.exe" '写下调用的程序的名称.
WshShell.Run (allApp) '启动调用的程序

dim AppPath
for each ps in getobject("winmgmts:\\.\root\cimv2:win32_process").instances_ '列出系统中所有正在运行的程序
if lcase(ps.name)=AppName then'检测程序在进程中是否存在
AppPath=ps.commandline'提取程序的命令行
AppPath1=Replace(AppPath,chr(34),space(1))'用空格替换掉字符串中的双引号
end if
next

do'循环检测
myqqin=chkuin(App)'检测上面得到命令行是否在进程中存在!
if not myqqin then'如果没有运行则,告诉用户,并且结束监控!
msgbox "调用的程序已经退出了!"'实际使用中,请取掉这一行!
Exit do
else
wscript.sleep 3000'等待5秒
end if
loop'返回继续检测

function chkuin(App)
for each ps in getobject("winmgmts:\\.\root\cimv2:win32_process").instances_
if lcase(ps.name)=AppName then
AppPatht1=ps.commandline
if AppPatht1=AppPath then chkuin=true end if
end if
next
end function


[ Last edited by voiL on 2009-8-6 at 22:16 ]
3 发表于 2009-08-06 22:44 ·  中国 广东 肇庆 四会市 电信
中级用户
★★
积分 384
发帖 189
注册 2005-10-19 13:12
20年会员
UID 43709
性别 男
状态 离线
搞定了哈哈,现在剩下的就是如何去把那两个字符串进行比较了,因为我实际使用中对比不成功,不知是怎么一回事。

AppPath1=Replace(AppPath,"""","")剔除一个双引号
4 发表于 2009-08-06 23:02 ·  中国 广东 肇庆 四会市 电信
中级用户
★★
积分 384
发帖 189
注册 2005-10-19 13:12
20年会员
UID 43709
性别 男
状态 离线
我在用
StrComp (AppPath1,allApp,1)
对这两个变量进行比较时,出现"调用过程(sub)时不能使用引号"的提示,请问是怎么一回事?
5 发表于 2009-08-06 23:17 ·  中国 广东 肇庆 四会市 电信
中级用户
★★
积分 384
发帖 189
注册 2005-10-19 13:12
20年会员
UID 43709
性别 男
状态 离线
搞定了,呵呵
6 发表于 2009-08-07 02:23 ·  中国 广东 中山 电信
初级用户
积分 102
发帖 47
注册 2008-11-10 08:29
17年会员
UID 130514
性别 男
状态 离线
全是自言自语么……我汗
lz真是自力更生自学成才的典范啊~~
7 发表于 2009-08-07 12:34 ·  中国 广东 肇庆 四会市 电信
中级用户
★★
积分 384
发帖 189
注册 2005-10-19 13:12
20年会员
UID 43709
性别 男
状态 离线
Originally posted by azziporah at 2009-8-7 02:23:
全是自言自语么……我汗
lz真是自力更生自学成才的典范啊~~


在线等答复的时候顺便上网去查一下嘛,谁知道自己就搞定了,呵呵。

加上之前哪位坛友发的那个“结束不掉的CMD”脚本就可以进行相互监控了。
论坛跳转: