WMI - убить процесс
Автор Daniel Pineault   
05.12.2020 г.
Время от времени программы не завершаются должным образом. Поэтому может возникнуть необходимость прекратить процесс. Ниже представлена простая функция, в которую вы передаете полное имя процесса, который нужно завершить.
'--------------------------------------------------------------------------------------- 
' Procedure : WMI_KillProcesse
' Author : Daniel Pineault, CARDA Consultants Inc.
' Website : http://www.cardaconsultants.com
' Purpose : Forcibly kill all the instances of a specified process
' Copyright : The following is release as Attribution-ShareAlike 4.0 International

' (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/

' Req'd Refs: Uses Late Binding, so none required
'
' Input Variables:
' ~~~~~~~~~~~~~~~~

' sProcessName : Name of the process to kill
' sHost : Host computer to query, omit for the local PC
'
' Usage:

' ~~~~~~
' Call WMI_KillProcesse("explorer.exe")
' Call WMI_KillProcesse("excel.exe")
' Call WMI_KillProcesse("calculator.exe")
'
' Revision History:
' Rev Date(yyyy-mm-dd) Description
' **************************************************************************************
' 1 2015-05-28 Initial Release
' 2 2020-08-21 Added Proc Header
' Code updated
' Updated Error Handler
' Made it Option Explicit compliant
'---------------------------------------------------------------------------------------
Public
Function WMI_KillProcesse(sProcessName As String, Optional sHost As String = ".") As Boolean
On Error GoTo Error_Handler
Dim oWMI As Object 'WMI object to query about the PC's OS
Dim sWMIQuery As String 'WMI Query
Dim oCols As Object
Dim oCol As Object

Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sHost & "\root\cimv2")
sWMIQuery = "SELECT Name FROM Win32_Process"
Set oCols = oWMI.ExecQuery(sWMIQuery)
For Each oCol In oCols
If LCase(sProcessName) = LCase(oCol.Name) Then
oCol.Terminate ' Kill this instances of the process
End If
Next oCol
WMI_KillProcesse = True

Error_Handler_Exit:
On Error Resume Next
Set oCol = Nothing
Set oCols = Nothing
Set oWMI = Nothing
Exit Function

Error_Handler:
MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _
"Error Number: " & Err.Number & vbCrLf & _
"Error Source: WMI_KillProcesse" & vbCrLf & _
"Error Description: " & Err.Description & _
Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
, vbOKOnly + vbCritical, "An Error has Occurred!"
Resume Error_Handler_Exit
End Function


Имейте в виду, что он закроет все экземпляры данного процесса. Допустим, у вас запущено 3 экземпляра Excel, и вы завершаете работу excel.exe, все три экземпляра будут остановлены.

Кроме того, этот метод представляет собой завершение процесса грубой силой, поэтому вам не будет предложено сохранить и несохраненную работу ... Это последний подход, обычно для зависших процессов.

Источник VBA – Kill a Process

 


Просмотров: 2446

  Ваш коментарий будет первым

Добавить коментарий
Имя:
E-mail
Коментарий:



Код:* Code