WMI-определить, работает ли процесс или программа |
|
|
Автор Daniel Pineault
|
04.12.2020 г. |
Когда-то, в одной из задач, мне было необходимо организовать взаимодействие из Access с определённым процессом (задачей) Он мог быть запущен или нет. Я организовал проверку его работы по ошибке. Если при обращении к процессу возвращалась ошибка, то процесс не был запущен. Но не для всех процессов это подходило. Потом я нашел в интернете более оригинальное определение работы нужного процесса. Может кому-то пригодится (Admin)
Простой метод проверить, запущена ли программа (фактически процесс) в настоящее время на компьютере, локальном или удаленном (если установлены соответствующие разрешения для удалённой проверки такой информации) с помощью простого запроса WMI.
'--------------------------------------------------------------------------------------- ' Procedure : WMI_IsProcessRunning ' Author : Daniel Pineault, CARDA Consultants Inc. ' Website : http://www.cardaconsultants.com ' Purpose : Determine if a process or Program is running or not ' Returns: True/False ' 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: ' ~~~~~~~~~~~~~~~~ ' sExeName : Name of the process to look for ' sHost : Host computer to query, omit for the local PC ' ' Usage: ' ~~~~~~ ' WMI_IsProcessRunning("firefox.exe") ' WMI_IsProcessRunning("outlook.exe") ' WMI_IsProcessRunning("msaccess.exe", "HomePC01") ' WMI_IsProcessRunning("msaccess.exe", "192.168.100.12") ' ' Revision History: ' Rev Date(yyyy/mm/dd) Description ' ************************************************************************************** ' 1 2010-Feb-03 Initial Release ' 2 2020-08-21 Renamed the Function ' Updated Proc Header ' Code updated ' Updated Error Handler '--------------------------------------------------------------------------------------- Public Function WMI_IsProcessRunning(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 * FROM Win32_Process WHERE Name = '" & sProcessName & "'" Set oCols = oWMI.ExecQuery(sWMIQuery) If oCols.Count <> 0 Then WMI_IsProcessRunning = True Error_Handler_Exit: On Error Resume Next 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_IsProcessRunning" & 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 Примечание. WMI - Windows Management Instrumentation в дословном переводе — инструментарий управления Windows. WMI — это одна из базовых технологий для централизованного управления и слежения за работой различных частей компьютерной инфраструктуры под управлением платформы Windows.
Источник WMI-Determine If a Process or Program Is Running Or Not Просмотров: 1741
Ваш коментарий будет первым | | |