|
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
状态 离线
|
『第
6 楼』:
迄今为止,多数人都知道 WMI 内没有内置用于排序返回数据的机制,您得到的是以看似随机的方式排序的数据。事实证明,有方法可以改变 WMI 的这种杂乱排序现象:不随机排序数据,而是按关键属性排序数据。假设我们运行的脚本返回关于计算机上运行的进程的信息。如果我们仅回显进程 Name,那么,似乎已经以随机方式返回了数据:
System Idle Process
System
smss.exe
csrss.exe
winlogon.exe
services.exe
lsass.exe
但请注意,如果我们回显进程 Name 旁的进程 Handle 会发生什么情况:
System Idle Process 0
System 4
smss.exe 644
csrss.exe 716
winlogon.exe 740
services.exe 784
lsass.exe 796
您可以看到,没有关于它的随机排序:数据按关键属性 (Handle) 排序。您没有任何办法能改变排序顺序,但是,了解到 WMI 遵循可以预见的方式而不仅仅是以随机方式获取进程信息并将其显示在屏幕上,这仍然是一件令人鼓舞的事情。
如果您知道类的关键属性,也就知道了标识和检索该类的唯一实例的可靠方法。按 Name 检索进程无法保证实例的唯一性;现在,我们的测试计算机上有 5 个不同的 Svchost.exe 实例在运行。但是,按 Handle 检索进程肯定能保证实例的唯一性:如果我们请求含 Handle 1318 的进程,那么我们将只得到返回的含特定 Handle 的进程。您时常需要分离类的单个实例;关键属性是完成此操作的极佳方法。
|
|
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 楼』:
Quote: | 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 楼』:
Quote: | 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 |
|