Taskkill-Befehl, der nur den mit subprozess.Popen () geöffneten Datei-Explorer beendet.

0

Ich habe zwei Instanzen von geöffnet D:\akshit Mappe. Eine, die ich manuell über die GUI geöffnet habe. Das andere habe ich mit einem Skript erstellt, das aufruft subprocess.Popen(). Wenn ich nun den folgenden Befehl schreibe, wurde nur die Instanz mit geöffnet subprocess.Popen() wird getötet:

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

Kann mir jemand erklären auf welcher Basis das geht taskkill beschließen, die anderen Instanzen nicht zu töten? Kann ich dieses Verhalten irgendwie ändern, um alle Instanzen mit dem Fenstertitel "akshit" zu beenden?

akshit bhatia
quelle
Was passiert, wenn Sie verwenden? TASKLIST /F /FI "WINDOWTITLE eq akshit" /IM explorer.exe? Dieser Befehl dient zum Auflisten der Aufgaben. Wenn auch nur ein Ergebnis angezeigt wird, haben Sie Ihre Antwort. Sie können TASKLIST verwenden, um herauszufinden, was geändert werden muss, damit sich TASKKILL richtig verhält.
LPChip
wir können nicht / F oder / IM mit tasklist verwenden. Es gibt ein ungültiges Argument.
akshit bhatia

Antworten:

1

Es ist nicht die Schuld von TaskKill. Wenn Sie zwei Datei-Explorer-Fenster geöffnet haben, bedeutet dies nicht unbedingt, dass Sie zwei separate Prozesse für jedes geöffnet haben.

Eine der Einstellungen, die sich auf Ihre Situation auswirken können, finden Sie unter:

Ordneroptionen → Registerkarte Ansicht → Erweiterte Einstellungen → "Ordnerfenster in einem separaten Prozess starten"

Diese Einstellung hat folgende Auswirkungen:

  • Wenn dieses Kontrollkästchen ist nicht In den meisten Fällen werden Datei-Explorer-Fenster in demselben Fenster geöffnet explorer.exe Prozess, der die Taskleiste und das Startmenü hostet. Der Fenstertitel dieses Prozesses ist festgelegt. Wenn Sie diesen Prozess beenden, verschwindet Ihre gesamte Windows-Shell.
  • Wenn dieses Kontrollkästchen ist Wenn diese Option aktiviert ist, ist der Prozess, der die Taskleiste und das Startmenü hostet, immer von dem Prozess getrennt, in dem sich Ihre File Explorer-Fenster befinden. Aber dennoch, Dies bedeutet nicht, dass Sie eine davon erhalten explorer.exe Prozess für jedes File Explorer-Fenster. Ich habe dies in Windows Server 2008 R2 und Windows 10 1709 getestet. Ich bekomme immer genau einen explorer.exe Vorgang für alle meine File Explorer-Fenster und ein weiteres explorer.exe für meine Taskleiste und Startmenü. Das WINDOWTITLE dieses Prozesses ist immer der Titel des zuletzt geöffneten Datei-Explorer-Fensters.

Ein Grund dafür subprocess.Popen() Öffnet einen separaten Datei-Explorer-Prozess, wenn Sie einen 32-Bit-Python auf einem 64-Bit-Computer ausführen. In diesem Fall subprocess.Popen() öffnet gerade ein 32-Bit explorer.exe. (Dies ist nicht in allen Windows-Versionen der Fall, aber Sie haben keine angegeben.) Ein anderer Grund ist der Out-of-Process-DCOM-Aufruf, der mich immer auslöst.

Aber der Kern davon ist:

  • Fenster ≠ Prozess

quelle
Vielen Dank!! Es funktioniert jetzt gut. Ist es möglich, diese Option über ein Python-Skript einzustellen?
akshit bhatia
Dies ist möglich, wird jedoch erst nach einem Neustart des Computers wirksam. Es ist eine Einstellung in der Windows-Registrierung. Ich bin mir nicht sicher, wo genau, aber Sie können Sysinternals Process Monitor wahrscheinlich verwenden, um ihn zu finden, wenn Ihnen eine Google-Suche keine Antwort gab.