Как мне это сделать, мне в принципе понятно:
Код: Выделить всё
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)
Код: Выделить всё
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
Мобильная версия