如何使用VBS轻柔地结束进程

时间:2012-06-11 16:14:10

标签: vbscript process

我喜欢使用VBScript结束进程。 不幸的是,我只找到了作者描述如何杀死这个过程的例子。

我想请求结束。所以objProcess.Terminate()无济于事。

我正在使用具有管理员权限的Windows XP SP3。

任何想法?

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以按照MSDN所述尝试CloseMainWindowClose方法,例如:

Sub KillingMeSoftly(processName)

    'partly copied from http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/processes/    
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colProcessList = objWMIService.ExecQuery _
        ("Select * from Win32_Process Where Name = '" & processName & "'")
    For Each objProcess in colProcessList
        objProcess.CloseMainWindow
        objProcess.Close
    Next

End Sub

这是一个糟糕的答案

<强>更新
在搜索答案时,我发现使用// T:nn选项启动脚本会触发对象上的Terminate事件:

class Foo
    sub class_terminate
        msgbox "Gracefull termination"
        ' Put your own termination code here.        
    end sub
end class

dim bar
set bar = new Foo

do 
loop ' makes the script run forever

将其另存为c:\endless.vbs

运行此脚本永远不会触发终止事件,因为它将在无限循环中挂起,但如果您以超时启动脚本,它将会;从命令提示符启动脚本:
C:\>wscript endless.vbs //T:5

你会在5秒后看到一个带有&#34; Gracefull终止的消息框&#34;出现。

如果您想在一定时间后退出脚本并且如果它本身没有结束则运行清理,这将非常有用。我不知道这是否涵盖了您要搜索的解决方案。

答案 1 :(得分:-1)

所以,最后我找到了解决问题的方法,但是使用VBS并没有解决。 编写了一个程序来向任何名为“SendSignal”的进程发送CTRL-BREAK。我之前尝试过这个,但我的所有进程都是响应,这是一个错误消息,它一直在运行。

我改变了这个程序发送CTRL + C.在此之后,我能够轻轻地关闭我的Javaw过程。

感谢所有人,感谢您的帮助!