Проблемы с завершением процесса методом WMI Terminate (исключение)Python

Программы на Python
Ответить
Anonymous
 Проблемы с завершением процесса методом WMI Terminate (исключение)

Сообщение Anonymous »

Я убью процесс с помощью Python (с помощью WMI)
Как мне это сделать, мне в принципе понятно:

Код: Выделить всё

import win32com
import subprocess
import time

name_app = "wordpad.exe"
path_to_app = "C:\\Program Files\\Windows NT\\Accessories\\" + name_app

# Start demo process which is to kill:
proc_app = subprocess.Popen(path_to_app)

time.sleep(2)

# Make WMI 'ready':
obj = win32com.client.GetObject("winmgmts:")
list_processes = obj.InstancesOf("Win32_Process")

# Search the to kill process by name:
for process in list_processes:
if process.name == name_app:
# Kill the process:
ret_val = process.Terminate()
print(ret_val)
Но в строке кода...

Код: Выделить всё

ret_val = process.Terminate()
...Я получаю исключение:
Не удалось выполнить!
TypeError: объект 'int' не может быть вызван

И вот этого я сейчас не понимаю. Кто-нибудь может мне помочь?
Дополнительная информация:

[*]PythonWin 3.11.5 (tags/v3.11.5:cce6ba9 , 24 августа 2023 г., 14:38:34) [MSC v.1936 64 бит (AMD64)] на win32.
[*]Вопрос, возможно, идет в направлении, которое было в этой теме «сбоку затронуто» (НО НЕ разъяснено): Переполнение стека - Как убить exe-файл Windows с помощью Python

ОБНОВЛЕНИЕ:
Это не совсем ответ, но я думаю, что я делаю еще один шаг «ближе» к ответу

Я еще раз прочитал документацию здесь:
Win32_Process
Terminate-Methode
Я провел несколько экспериментов (и теперь я в полном замешательстве)
ПЕРЕД строкой кода...

Код: Выделить всё

ret_val = process.Terminate()
...В разных запусках я сделал следующее:
A print(str(process.Terminate))< /p>
B print(str(callable(process.Terminate)))
C print(str(type(process.Terminate)) )
Результаты:
А

Код: Выделить всё

0

Execution failed!
com_error: SWbemObjectEx: 0x80041002 :: Nicht gefunden
com_error in subsequent call of "", line 28
ret_val = process.Terminate()
in file "C:\Program Files\Python311\Lib\site-packages\win32com\client\dynamic.py", line 634
ret = self._oleobj_.Invoke(retEntry.dispid, 0, invoke_type, 1)
Б

Код: Выделить всё

False

Execution failed!
com_error: SWbemObjectEx: 0x80041002 :: Nicht gefunden
com_error in subsequent call of "", line 28
ret_val = process.Terminate()
in file "C:\Program Files\Python311\Lib\site-packages\win32com\client\dynamic.py", line 634
ret = self._oleobj_.Invoke(retEntry.dispid, 0, invoke_type, 1)
C

Код: Выделить всё


Execution failed!
com_error: SWbemObjectEx: 0x80041002 :: Nicht gefunden
com_error in subsequent call of "", line 28
ret_val = process.Terminate()
in file "C:\Program Files\Python311\Lib\site-packages\win32com\client\dynamic.py", line 634
ret = self._oleobj_.Invoke(retEntry.dispid, 0, invoke_type, 1)
Если я выполняю ТОЛЬКО...

Код: Выделить всё

ret_val = process.Terminate()
...поэтому я получаю, как и раньше, следующее:

Код: Выделить всё

Execution failed! TypeError: 'int' object is not callable
Может быть, есть у кого-нибудь идеи, в чем может быть причина проблемы?
Как выглядит «Terminate», который должен быть COM-методом (согласно документации Terminate- Метод уничтожения процесса) в моем случае действительно «только» целое число. Но почему? Может ли это быть какая-то сумасшедшая проблема с COM? Может ли кто-нибудь воспроизвести проблему? Мой пример кода должен работать на других компьютерах с Windows (у меня здесь Windows 10)

Подробнее здесь: https://stackoverflow.com/questions/792 ... -exception
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»