Как получить список задач с параметрами запуска процесса

И еще про «устаревшие» технологии, которые можно (и даже нужно) перевести на современные рельсы. К примеру у меня долгое время работает утилита, которая получает список бекграунд-процессов на Windows-сервере и совершает с запущенными процессами некоторые действия — смотрит логи, проверяет — не завис ли процесс, запускает или останавливает его.

Как получался список программ и параметров запуска? Конечно же утилитой wmic (Windows Management Instrumentation) делался вывод в файл и он потом разбирался в цикле.
Теперь аналогичную задачу можно делать и с помощью .Net — намного легче читается код и нет форматированного ввода из потока.

USING System.*.
USING System.Management.* FROM ASSEMBLY.
 
&GLOBAL-DEFINE mqworker _progres.exe
 
DEF VAR oProcess     AS ManagementObject                                      NO-UNDO.
DEF VAR oEnumeration AS ManagementObjectCollection+ManagementObjectEnumerator NO-UNDO.
DEF VAR oSearcher    AS ManagementObjectSearcher                              NO-UNDO.
DEF VAR oQuery       AS SelectQuery                                           NO-UNDO.
 
 
oQuery = NEW System.Management.SelectQuery("Win32_Process","Name=~"{&mqworker}~"").
oSearcher = NEW ManagementObjectSearcher(oQuery).
oEnumeration = oSearcher:GET():GetEnumerator().
 
DO WHILE oEnumeration:MoveNext() = TRUE:
  oProcess = CAST(oEnumeration:Current,ManagementObject).  
 
  MESSAGE "ProcessName: " oProcess:Item["Name"]:ToString() ","
          oProcess:Item["CommandLine"]:ToString() "," 
          oProcess:Item["ProcessId"]:ToString()
   VIEW-AS ALERT-BOX.
 
END.

Напомню, что использовать .Net-объекты из Windows-сессий можно только полноценно в v11. В версии 10.2B мы ограничены только prowin32 и WebClient-сессиями. Это означает, что сервер приложений в v10 .Net звать не может.

Для корректной работы данного примера нам необходимо сделать еще файл-манифест и положить его в свой PROPATH. Для примера запустим prowin.exe (или prowin32.exe) и пойдем в Tools -> Assembly References. Далее — File-> New и добавляем пространство System.Management в Assembly References и сохраняем результат в assemblies.xml

Leave a Reply

You must be logged in to post a comment.