Я открыл два экземпляра папки D:\akshit . Один я открыл вручную с помощью графического интерфейса. Но другой, я создал с помощью скрипта, который вызывает subprocess.Popen() . Теперь, когда я пишу следующую команду, только экземпляр открывается с помощью subprocess.Popen() убивают:

TASKKILL /F /FI "WINDOWTITLE eq akshit" /IM explorer.exe

Кто-нибудь может объяснить, на каком основании taskkill решает не убивать другие экземпляры? Можно ли как-то изменить это поведение, чтобы убить все экземпляры с заголовком окна "Акшит"?

1 ответ1

1

Это не вина TaskKill. Хотя вы открыли два окна File Explorer, это не обязательно означает, что вы открыли два отдельных процесса для каждого.

Один из параметров, которые могут повлиять на вашу ситуацию, можно найти в разделе:

Параметры папки → вкладка "Вид" → "Дополнительные параметры" → "Запускать окна папок в отдельном процессе"

Этот параметр имеет следующие эффекты:

  • Если этот флажок не установлен , в большинстве случаев окна проводника открываются в том же процессе explorer.exe котором размещаются панель задач и меню «Пуск». Заголовок окна этого процесса фиксирован. Если вы убьете этот процесс, вся ваша оболочка Windows исчезнет.
  • Если этот флажок установлен , процесс, в котором размещаются панель задач и меню «Пуск», всегда отделен от процесса, в котором размещены окна проводника. Но все же это не означает, что вы получаете один отдельный процесс explorer.exe для каждого окна проводника. Я проверял это в Windows Server 2008 R2 и Windows 10 1709. Я всегда получаю один процесс explorer.exe для всех окон Windows Explorer и еще один файл explorer.exe для панели задач и меню «Пуск». WINDOWTITLE этого процесса всегда является заголовком окна File Explorer, которое было открыто последним.

Одна из причин этого subprocess.Popen() открывает отдельный процесс File Explorer, возможно, вы запускаете 32-битный Python на 64-битном компьютере, в этом случае subprocess.Popen() просто открывает 32-битный explorer.exe . (Это происходит не во всех версиях Windows, но, опять же, вы не указали ни одну.) Другая причина - вызов DCOM вне процесса, который всегда сбивает меня с толку.

Но суть этого такова:

  • Окно ≠ Процесс

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