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

622
akshit bhatia

Ich habe zwei Instanzen des D:\akshitOrdners geöffnet . Eine, die ich manuell über die GUI geöffnet habe. Aber das andere habe ich mit einem Skript erstellt, das aufruft subprocess.Popen(). Wenn ich nun den folgenden Befehl schreibe, wird nur die Instanz beendet, die mit using geöffnet wurde subprocess.Popen():

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

Kann jemand erklären, auf welcher Grundlage er sich taskkillentscheidet, die anderen Instanzen nicht zu töten? Kann ich dieses Verhalten irgendwie ändern, um alle Instanzen mit dem Fenstertitel "akshit" zu beenden?

0
Was passiert, wenn Sie TASKLIST / F / FI "WINDOWTITLE eq akshit" / IM explorer.exe verwenden? 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 vor 5 Jahren 0
wir können nicht / F oder / IM mit tasklist verwenden. Es gibt ein ungültiges Argument. akshit bhatia vor 5 Jahren 0

1 Antwort auf die Frage

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 nicht aktiviert ist, werden die Datei-Explorer-Fenster meistens in demselben explorer.exeProzess geöffnet wie Taskleiste und Startmenü. Der Fenstertitel dieses Prozesses ist festgelegt. Wenn Sie diesen Prozess beenden, verschwindet Ihre gesamte Windows-Shell.
  • Wenn dieses Kontrollkästchen 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 nach wie vor, das bedeutet nicht, dass Sie einen separaten erhalten explorer.exefür jedes Datei - Explorer - Fenster Prozess. Ich habe dies in Windows Server 2008 R2 und Windows 10 1709 getestet. Ich bekomme immer genau einen explorer.exeProzess für alle meine File Explorer-Fenster und einen weiteren Prozess explorer.exefür meine Taskleiste und das Startmenü. Der WINDOWTITLEProzess dieses Prozesses ist immer der Titel des zuletzt geöffneten Datei-Explorer-Fensters.

Ein Grund, subprocess.Popen()der einen separaten Datei-Explorer-Prozess öffnet, könnte sein, dass Sie einen 32-Bit-Python auf einem 64-Bit-Computer ausführen. In diesem Fall wird subprocess.Popen()nur ein 32-Bit -Computer geöffnet 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
Vielen Dank!! Es funktioniert jetzt gut. Ist es möglich, diese Option über ein Python-Skript einzustellen? akshit bhatia vor 5 Jahren 0
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, falls Sie nicht durch eine Google-Suche gefunden wurden. vor 5 Jahren 0