1

Чтобы убить запущенный процесс в Windows, используя его путь к исполняемому файлу, я мог бы использовать любой из:

wmic process where ExecutablePath='C:\\path\\to\\my.exe' delete

Или же:

wmic process where ExecutablePath='C:\\path\\to\\my.exe' call terminate

В чем заключается практическая разница между этими двумя подходами?

1 ответ1

1

С call terminate мы можем передать состояние выхода, например, call terminate '-1073741510' . 32-битное значение состояния должно быть подписано, а отрицательное значение должно быть заключено в кавычки. Последнее значение - STATUS_CONTROL_C_EXIT (0xC000013A) как десятичное значение со знаком. Статус выхода по умолчанию равен 0, это то же значение, которое используется для глагола delete .

С точки зрения реализации служба WMI запускает экземпляр хоста поставщика WMI (wmiprvse.exe) для обработки запроса. Относительно легко подключить отладчик для проверки этого, поскольку хост-процесс провайдера повторно используется в течение нескольких минут. Класс Win32_Process реализован в модуле провайдера Win32 WMI (cimwin32.dll), который содержит класс Process с DeleteInstance и ExecTerminate , вызываемыми соответственно для delete и call terminate . Оба метода в конечном счете вызывают WINAPI TerminateProcess .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .