繁体   English   中英

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

[英]Kill all processes with a certain name

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

因此,我试图杀死名称为SyncToyCmd.exe任何进程。 我利用window_onBeforeUnload事件并从那里调用KillSyncToy()子。

该功能可以正确检测SyncToyCmd.exe实例,但是在尝试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

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

但是,从查询Win32_Process返回的对象具有Terminate方法。 我建议您使用它而不是炮轰:

For Each Process in ProcessList
    Process.Terminate
Next

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM