WaitForExit для процесса на удаленном компьютере

Функция «без фигурных скобок» является указателем на некоторую функцию.

Вот пример.

let bananas = function(){ console.log('bananas') }

Когда вы делаете это, вы не вызываете функцию, а только ссылаетесь на нее, только создаете указатель на функцию. С этой ссылкой вы можете звонить bananas() в любое время, а не только когда код читается.

Причина, по которой вы передаете только ссылку на функцию в реакции, заключается в том, что внутри компонента, где он будет вызывать функцию.

Если вы просто сделаете это <input type="text" onChange={this.name()} />, во время рендеринга ввода вызывается name(), но если вы передаете только ссылку на функцию, реакция будет вызывать функцию только тогда, когда событие (onChange) случается.

5
задан Community 23 May 2017 в 11:47
поделиться

3 ответа

Я не знаю, насколько это может быть эффективным, вы можете использовать ManagementEventWatcher для просмотра запрос.

Вот что я нашел в сети.

WqlEventQuery wQuery = 
 new WqlEventQuery("Select * From __InstanceDeletionEvent Within 1 Where TargetInstance ISA 'Win32_Process'");

using (ManagementEventWatcher wWatcher = new ManagementEventWatcher(scope, wQuery))
{    
  bool stopped = false;

  while (stopped == false)
  {
    using (ManagementBaseObject MBOobj = wWatcher.WaitForNextEvent())
    {
      if (((ManagementBaseObject)MBOobj["TargetInstance"])["ProcessID"].ToString() == ProcID)
      {
        // the process has stopped
        stopped = true;
      }
    }
  }

  wWatcher.Stop();
}
4
ответ дан 14 December 2019 в 09:00
поделиться

Если процесс на удаленной машине является вашим кодом, вы можете открыть сокет на вызывающей машине и позволить удаленная машина «пингует» ее по завершении.

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

1
ответ дан 14 December 2019 в 09:00
поделиться

Родным способом 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 , чтобы избежать необходимости опроса событий удаления.

2
ответ дан 14 December 2019 в 09:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: