杀死具有特定名称的所有进程
Kill all processes with a certain name
我有一个运行备份例程的 HTA。对于备份,我使用的是 SyncToy 命令行可执行文件,在某些情况下它不会正确停止。
正因为如此,我试图终止所有名为 SyncToyCmd.exe
的进程。我利用 window_onBeforeUnload
事件并从那里调用 KillSyncToy()
子。
该函数正确检测 SyncToyCmd.exe
的实例,但是在尝试终止进程时我收到错误消息 -
Error: The system cannot find the file specified.
我猜我在这里做错了什么,欢迎任何帮助。
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
have a Terminate
方法返回的对象。我建议使用它而不是掏空:
For Each Process in ProcessList
Process.Terminate
Next
我有一个运行备份例程的 HTA。对于备份,我使用的是 SyncToy 命令行可执行文件,在某些情况下它不会正确停止。
正因为如此,我试图终止所有名为 SyncToyCmd.exe
的进程。我利用 window_onBeforeUnload
事件并从那里调用 KillSyncToy()
子。
该函数正确检测 SyncToyCmd.exe
的实例,但是在尝试终止进程时我收到错误消息 -
Error: The system cannot find the file specified.
我猜我在这里做错了什么,欢迎任何帮助。
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
have a Terminate
方法返回的对象。我建议使用它而不是掏空:
For Each Process in ProcessList
Process.Terminate
Next