Родным способом Win32 для достижения этой цели было бы выполнение WaitForSingleObject()
для дескриптора процесса, возвращаемого CreateProcess()
, однако я не думаю, что этот дескриптор доступен вам из WMI.
В этой статье предлагается еще один вариант, который вы могли бы рассмотреть - вместо того, чтобы опрашивать список процессов и ждать, пока ваш процесс исчезнет, он неоднократно запрашивает события удаления процессов, соответствующие вашему идентификатору процесса:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process")
objWMIService.Create "notepad.exe", null, null, intProcessID
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colMonitoredProcesses = objWMIService.ExecNotificationQuery _
("Select * From __InstanceDeletionEvent Within 1 Where TargetInstance ISA 'Win32_Process'")
Do Until i = 1
Set objLatestProcess = colMonitoredProcesses.NextEvent
If objLatestProcess.TargetInstance.ProcessID = intProcessID Then
i = 1
End If
Loop
Вы также можете улучшить это, используя объект ManagementEventWatcher
и его метод WaitForNextEvent
, чтобы избежать необходимости опрашивать события удаления.