taskkill 命令仅终止使用 subprocess.Popen() 打开的文件资源管理器

taskkill 命令仅终止使用 subprocess.Popen() 打开的文件资源管理器

我打开了两个D:\akshit文件夹实例。一个是我使用 GUI 手动打开的。但另一个是我使用调用的脚本创建的subprocess.Popen()。现在,每当我编写以下命令时,只有使用 打开的实例subprocess.Popen()会被终止:

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

taskkill有人能解释一下他们决定不杀死其他实例的依据是什么吗?我能以某种方式改变这种行为来杀死所有窗口标题为“akshit”的实例吗?

答案1

这不是 TaskKill 的错。虽然您打开了两个文件资源管理器窗口,但这并不一定意味着您为每个窗口打开了两个单独的进程。

可能对您的情况产生影响的设置之一位于:

文件夹选项 → 查看选项卡 → 高级设置 → “在单独的进程中启动文件夹窗口”

此设置有以下效果:

  • 如果此复选框不是经过检查,大多数情况下,文件资源管理器窗口在explorer.exe承载任务栏和“开始”菜单的同一进程中打开。此进程的窗口标题是固定的。如果您终止此进程,整个 Windows shell 都会消失。
  • 如果此复选框经过检查,托管任务栏和“开始”菜单的进程始终与托管文件资源管理器窗口的进程分开。但仍然,这并不意味着explorer.exe每个文件资源管理器窗口都有一个单独的进程。我在 Windows Server 2008 R2 和 Windows 10 1709 中对此进行了测试。explorer.exe我的所有文件资源管理器窗口始终只有一个进程,explorer.exe任务栏和“开始”菜单也只有一个进程。WINDOWTITLE该进程的标题始终是最后打开的文件资源管理器窗口的标题。

打开单独的文件资源管理器进程的一个原因subprocess.Popen()可能是您在 64 位计算机上运行 32 位 Python,在这种情况下,subprocess.Popen()只会打开 32 位explorer.exe。 (这并非发生在所有版本的 Windows 中,但同样,您没有指定任何版本。)另一个原因是进程外 DCOM 调用总是让我绊倒。

但它的要点是:

  • 窗口≠进程

相关内容