|
hackhd
中级用户
  
积分 231
发帖 102
注册 2008-1-25
状态 离线
|
『楼 主』:
当第二个VBS运行时如何关掉第一个的进程
kill "wscript.exe",1 '可能是脚本问题吧。检测一个的时候就是检测二个,把此代码保存为VBS,复制一分,运行第一个,再运行复制的那个,你会发现一会儿,两个WSCRIPT进程都给关闭了。郁闷,我只想当第二个VBS运行时关掉第一个VBS的进程。帮我修改修改代码吧
do
msgbox ("1")
msgbox ("2")
msgbox ("3")
msgbox ("4")
msgbox ("5")
loop
function kill(pcs,xx)
if jc(pcs,1) then
on error resume next
Set objwmiservice=getobject("winmgmts:\\.\root\cimv2")
Set colprocesslist=objwmiservice.execquery ("select * from
win32_process where name='"&pcs&"' ")
for each objprocess in colprocesslist
objprocess.terminate()
next
if xx=1 then taskkill=1
end if
end function
function jc(wr,gs)
on error resume next
wscript.sleep 5000
set y=getobject("winmgmts:\\.\root\cimv2")
set x=y.execquery("select * from win32_process where name='"&wr&"'")
i=0
for each j in x
i=i+1
next
if not er then
if i>gs then jc=true
else
jc=1
end if
end function
function er()
if err.number=0 then
er=false
else
err.clear
er=true
end if
end function
|
|
2008-2-4 02:04 |
|
|
luckboy45
中级用户
  
积分 487
发帖 212
注册 2007-4-1
状态 离线
|
『第
2 楼』:
兄弟,貌似不能吧..正如P一样,如果是杀进程将杀掉所有CMD进程,包括自己....
|

|
|
2008-2-4 09:44 |
|
|
fastslz
铂金会员
       DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
『第
3 楼』:
查进程镜像路径获取PID杀PID就OK了
办年货了长话短说
这段代码实例只杀访问D:\Test目录的CMD.EXE进程 @echo off
md D:\test 2>nul
start /min cmd /k cd D:\test
start /min cmd /k cd D:\test
for /f "tokens=2,3 delims=," %%i in ('wmic process get ProcessId^,CommandLine /format:csv^|find /v "find"^|find /i "D:\test"') do call set pid=%%pid%% /pid %%j
taskkill.exe /f %PID%
rd /s /q D:\test\
pause
|

|
|
2008-2-4 14:31 |
|
|
slore
铂金会员
      
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
4 楼』:
如果知道WMI查询到的顺序就好了。
如果是按运行顺序查询到的话,不用循环直接结束。。。应该是第一个。。
|
|
2008-2-4 16:30 |
|
|
hackhd
中级用户
  
积分 231
发帖 102
注册 2008-1-25
状态 离线
|
『第
5 楼』:
哦也。问题是它有不有规律的顺序哦
|
|
2008-2-4 22:04 |
|
|
slore
铂金会员
      
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
|
2008-2-5 02:27 |
|
|
slore
铂金会员
      
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
7 楼』:
不过上面的例子叙述有问题……
只能说明有顺序,但是千万不认为就是PID(HANDLE)的排序!
我测试了下。。。
但是结果是更令我们高兴的!的确是进程的执行顺序!
|
|
2008-2-5 02:42 |
|
|
3742668
荣誉版主
      
积分 2013
发帖 718
注册 2006-2-18
状态 离线
|
『第
8 楼』:
Originally posted by slore at 2008-2-5 02:42:
我测试了下。。。
但是结果是更令我们高兴的!的确是进程的执行顺序! 并不一定,至少我这里测试的结果是错误的。
实现楼主的目的,个人认为如果纯粹地用vbs来实现的话,最后分两种情况,第一种是前后两个vbs并非同一个文件,判断它们的CommandLine属性就可以将其分别开来.
另一种则是两个vbs是同一个文件重复执行的情况,则可以在vbs中分别打开一可执行程序,例如记事本,在打开记事本的代码段前先判断有没有notepad.exe进程,如果有,再看notepad的ParentProcessId是否和wscript.exe的pid相同,如果相同则结束之,再结束notepad.exe,然后再打开一notepad.exe以供下一次参考。
楼主有兴趣的话可以尝试一下,理论上是不存在任何问题的。
|
|
2008-2-5 11:33 |
|
|
slore
铂金会员
      
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
9 楼』:
???我打开不同文件,不同程序,打开同一个文件。。。。然后按WMI返回的进程列表,重上向下通过PID结束进程……是我的顺序,不知道3742668你的结果是怎么样?有跳跃的?
|
|
2008-2-5 12:35 |
|
|
3742668
荣誉版主
      
积分 2013
发帖 718
注册 2006-2-18
状态 离线
|
『第
10 楼』:
Originally posted by slore at 2008-2-5 12:35:
???我打开不同文件,不同程序,打开同一个文件。。。。然后按WMI返回的进程列表,重上向下通过PID结束进程……是我的顺序,不知道3742668你的结果是怎么样?有跳跃的? 我的测试结果,pid大的并不一定就是后执行的。
|
|
2008-2-6 12:54 |
|
|
slore
铂金会员
      
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
11 楼』:
7楼已经说了……
下次来了再仔细看看。
|
|
2008-2-6 13:07 |
|