Taskkill через LogMeIn

Я использую задачу LogMeIn OneToMany для развертывания обновления на некоторых компьютерах, на которых запущено мое приложение. У меня есть процесс Python, который порождает дочерний.exe. Он запускается как "python.exe" (как указано в списке задач) и имеет название "Администратор: AppRunner".

Я не могу убить python.exe, потому что есть другие запущенные скрипты, которые я не хочу умирать. Итак, я пытаюсь убить на основе названия названия. Ниже работает локально, но не работает при выполнении через logmein:

os.system('taskkill /f /t /fi "WindowTitle eq Administrator:  AppRunner"')

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

os.system('taskkill /f /im program.exe')

Есть ли что-то очевидное, чего мне не хватает, или кто-то может помочь мне с методом отладки чего-то подобного, чтобы я мог разобраться в проблеме?

1 ответ

Решение

Как вы уже заметили, со страниц справки Microsoft для taskkill:

Фильтры WINDOWTITLE и STATUS не поддерживаются, если указана удаленная система.

Вместо этого вы можете заставить свой дочерний процесс написать PID-файл:

import os

pid = os.getpid()
with open('c:\\temp\\myapp.pid','w') as pidfile:
    pidfile.write(str(pid))

И затем, когда вы хотите завершить процесс, получите PID из файла и уничтожьте его, используя /PID включи тасккилл. Предполагая, что вы прочитали PID в переменную mypid:

os.system('taskkill /PID {} /f'.format(mypid))

Другие вопросы по тегам