使用特定名称杀死所有进程

时间:2015-07-09 14:19:44

标签: vbscript process wmi

我有一个运行备份例程的HTA。对于备份,我使用的是SyncToy命令行可执行文件,在某些情况下不能正常停止。

由于这一点,我正试图杀死任何名为SyncToyCmd.exe的进程。我使用window_onBeforeUnload事件并从那里调用KillSyncToy()子。

该函数正确检测SyncToyCmd.exe的实例,但是在尝试终止进程时我收到错误 -

  

错误:系统找不到指定的文件。

我猜我在这里做错了什么,欢迎任何帮助。

Sub KillSyncToy()
    Dim WMIService : Set WMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
    Dim ProcessList : Set ProcessList = WMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'SyncToyCmd.exe'")

    Dim Process
    For Each Process in ProcessList
        '** Note that 'Shell' is a global instace of the 'WScript.Shell' object, so
        'there is no need to declare it here *'
        Shell.Exec "PSKill " & Process.ProcessId
    Next

    Set WMIService = Nothing
    Set ProcessList = Nothing
End Sub

1 个答案:

答案 0 :(得分:3)

错误消息表示Exec无法找到pskill.exe,因此可执行文件很可能不在%PATH%或当前工作目录中。您可以通过指定可执行文件的完整路径来缓解这种情况。

但是,从查询https://msdn.microsoft.com/de-de/library/963zt96e(v=vs.90).aspx返回的对象采用Win32_Process方法。我建议使用它而不是炮轰:

For Each Process in ProcessList
    Process.Terminate
Next