Ich habe eine Batch-Datei, die einige Registrierungsdateien ändert und dann explorer.exe neu startet, damit sie wirksam werden. Ich benutze die Befehle
taskkill /f /im explorer.exe
explorer.exe
Dadurch werden natürlich alle explorer.exe-Prozesse abgebrochen, einschließlich der Explorer-Fenster, die ich geöffnet habe. (Natürlich benutze ich die Option zu Launch folder windows in a separate process
.)
Kann ich auf irgendeine Weise feststellen, welche Instanz von explorer.exe die Hauptinstanz ist, und töten Sie diese einfach?
windows
windows-explorer
process
batch-file
HodofHod
quelle
quelle
explorer.exe
Instanz zu bestimmen , aber aus dem entgegengesetzten Grund. Ich finde es ärgerlich, dass gespawnteexplorer.exe
Prozesse nicht immer beendet werden, wenn alle zugehörigen Fenster geschlossen werden. Ich benutze den Task-Manager, um sie zu töten, und neige dazu, mich auf die Tatsache zu verlassen, dass die gespawnten Instanzen normalerweise (aus irgendeinem Grund) auf hohe Priorität gesetzt sind. Das funktioniert einwandfrei, aber wenn ich es aus offensichtlichen Gründen auf "normal" gesetzt habe, besteht die Gefahr, dass der primäre Prozess versehentlich abgebrochen wird.taskkill /f /im explorer.exe /fi "windowtitle ne N/A"
. Aus irgendeinem Grund funktioniert das Kopieren / Einfügen in die cmd-Eingabeaufforderung nicht. Sie müssen es von Hand eingeben. Ich habe keine Batch-Datei ausprobiert.Antworten:
Fenstertitelbasierter Ansatz
@ Techie007 schlug vor , die
explorer.exe
mit Fenstertitel zu tötenN/A
.Befehl
Wie es funktioniert
tasklist /nh /v /fi "imagename eq explorer.exe"
Listet alle Prozesse mit Bildnamen ausführlich aufexplorer.exe
.for /f "tokens=2,10" %%p in ('COMMAND1') do COMMAND2
ausführt
COMMAND1
. Für jede Ausgabezeile werden die Variablen%%p
sowie%%q
das zweite und zehnte "Token" (durch Leerzeichen begrenzt) gesetzt und ausgeführtCOMMAND2
.Im Falle von
taskkill /v
, enthält%%p
nun die PID und%%q
den (Anfangs-) Fenstertitel.if "%%q"=="N/A" taskkill /f /pid %%p
prüft ob der Fenstertitel istN/A
.In diesem Fall wird der Vorgang mit abgebrochen
taskkill
.Memory Usage Based Approach
@Syntech wies darauf hin, dass dies für Windows Explorer unzuverlässig ist, aber in Programmen weist der Hauptprozess immer die höchste Speichernutzung auf.
Befehl
Wie es funktioniert
tasklist /nh /fi "imagename eq explorer.exe"
listet alle Prozesse mit Bildnamen aufexplorer.exe
.sort /+65
sortiert die vorherige Ausgabe ab dem 65. Zeichen (wo die Mem-Verwendung beginnt).for /f "tokens=2" %%p in ('COMMAND') do @set explorerpid=%%p
Setztexplorerpid
auf den zweiten (tokens=2
) Eingang - durch Leerzeichen getrennt - jeder Zeile des Ausgangs vonCOMMAND
, der die entsprechende PID ist.Da
tasklist
die Ausgabe sortiert wurde, wirdexplorerpid
die beanspruchte PID gespeichert undtaskkill
der Vorgang abgebrochen.quelle
Vielleicht können Sie den Explorer anweisen, den Pfad in der Titelleiste anzuzeigen und ihn dann mithilfe des
WINDOWTITLE
Filters zu beenden.Der Pfad wird in der Titelleiste des Explorers nicht mit den "nicht klassischen" Themen angezeigt, ist aber (jetzt) dort; es ist einfach nicht sichtbar.
taskkill /F /FI "WINDOWTITLE eq C:\PathToThing\RunningInExplorer\ToRestart*"
Möglicherweise müssen Sie vorübergehend zu einem klassischen Thema wechseln, um den Pfad / Titel für die Explorer-Instanz zu bestimmen, die Sie neu starten möchten.
Nicht 100% narrensicher, aber alle Explorer-Fenster, die diesen (Teil-) Pfad nicht im Titel haben, wären zumindest sicher. :)
bearbeiten:
Da Sie die Datei mit dem Titel "N / A" auswählen möchten, müssen Sie wahrscheinlich eine Batch-Datei verwenden, um die Ergebnisse einer TASKLIST zu token und diese Token-Ergebnisse zu verwenden, um TASKKIL nach PID zu töten.
Ich habe eine Antwort auf StackOverflow.com gefunden, die dies anspricht:
Von Frage Taskkill einen unbenannten Prozess? Ist diese Antwort, die diese Beispiel-Batch-Datei enthält:
Sie sollten den Befehl 'TASKLIST / V' so ändern, dass er spezifischer für Explorer.exe und dergleichen ist, aber er sollte Ihnen einen guten Ausgangspunkt bieten.
quelle
tasklist /fi "imagename eq explorer.exe" /v /fo list
sagt mir, dass sein Fenstertitel "N / A" ist. Leider funktioniert "windowtitle eq nv" nicht. Irgendwelche Ideen?Beenden Sie den Prozess mit der niedrigsten PID (Prozess-ID). Es wäre zuerst gestartet worden, da die Prozesse fortlaufend nummeriert werden.
quelle
tasklist | find /f "explorer"
und fragen und dann (mit Benutzereingabe) fragen, welche PID die niedrigste ist, die zu töten ist.sed
,awk
usw.) verwenden können, ist dies recht einfach und automatisch möglich. Wenn nicht, ist die Benutzereingabe möglicherweise die beste Wahl.