どの「explorer.exe」プロセスが主なプロセスであるかをどのように確認できますか?


13

いくつかのレジストリファイルを変更し、explorer.exeを再起動して有効にするバッチファイルがあります。私はコマンドを使用しています

taskkill /f /im explorer.exe
explorer.exe

もちろん、これは、開いているエクスプローラーウィンドウを含むすべてのexplorer.exeプロセスを強制終了ます。(明らかに、私はオプションを使用していますLaunch folder windows in a separate process。)

explorer.exeのどのインスタンスがメインのインスタンスであるかを判断し、それを強制終了する方法はありますか?


メインのexplorer.exeを強制終了すると、実行に依存しているため、おそらく他のすべてを強制終了します。
cutrightjm

1
@ekajありません。手動で行うことができます。各ウィンドウは独立したプロセスです。
Hod-モニカの軍隊

プライマリ(デスクトップに関連付けられている)explorer.exeインスタンスを決定するための信頼できる方法を見つけることに興味がありますが、反対の理由があります。explorer.exe関連するすべてのウィンドウが閉じられたときに、生成されたプロセスが常に終了するわけではないのは面倒です。私はそれらを殺すためにタスクマネージャを使用し、生成されたインスタンスが通常(何らかの理由で)高優先度に設定されているという事実に依存する傾向があります。これは正常に機能しますが、偶然に(明らかな理由で)通常に設定した場合、プライマリプロセスを誤って強制終了する危険があります。
Synetech

@Synetechその解決策はtaskkill /f /im explorer.exe /fi "windowtitle ne N/A"です。何らかの理由で、それをcmdプロンプトにコピー/貼り付けしても機能しません。手で入力する必要があります。バッチファイルを試しませんでした。
ホッド-モニカの軍隊

1
あなたは問題を簡単な部分と不可能な部分に分け、簡単な部分を解決し、不可能な部分の助けを求めています。ソリューションの「簡単な」部分が正しくない可能性が非常に高いため(たとえば、グループポリシーを使用して実行しようとしていることを達成できる可能性があるため)、解決しようとしている元の問題が質問に含まれていると便利です。自分に属していないプロセスを強制終了することはほとんどありません。
サイモンリヒター

回答:


9

ウィンドウタイトルベースのアプローチ

@ techie007explorer.exewith with titleを殺すことを提案しましたN/A

コマンド

for /f "tokens=2,10" %%p in ('tasklist /nh /v /fi "imagename eq explorer.exe"') do if "%%q"=="N/A" taskkill /f /pid %%p

使い方

  • tasklist /nh /v /fi "imagename eq explorer.exe"イメージ名を使用してすべてのプロセスを詳細にリストしますexplorer.exe

  • for /f "tokens=2,10" %%p in ('COMMAND1') do COMMAND2

    実行しCOMMAND1ます。出力の各行に対して、変数%%p%%qを2番目と10番目の「トークン」(スペースで区切る)に設定し、を実行しCOMMAND2ます。

    以下の場合はtaskkill /v%%p 今PIDを保持し、%%qウィンドウのタイトル(の始まり)。

  • if "%%q"=="N/A" taskkill /f /pid %%pウィンドウのタイトルがであるかどうかを確認しますN/A

    その場合、でプロセスを終了しますtaskkill

メモリ使用量ベースのアプローチ

@Syntechは、これはWindowsエクスプローラーでは信頼できないと指摘しましたが、プログラムでは、メインプロセスのメモリ使用量は常に最も高くなります。

コマンド

for /f "tokens=2" %%p in ('tasklist /nh /fi "imagename eq explorer.exe" ^| sort /+65') do @set explorerpid=%%p
taskkill /f /pid %explorerpid%

使い方

  • tasklist /nh /fi "imagename eq explorer.exe"すべてのプロセスをイメージ名でリストしますexplorer.exe

  • sort /+65 65番目の文字(memの使用が始まる)で始まる前の出力をソートします。

  • for /f "tokens=2" %%p in ('COMMAND') do @set explorerpid=%%pは、対応するPIDであるの出力の各行explorerpidの2番目の(tokens=2)入力(スペース区切り)に設定しCOMMANDます。

  • の出力tasklistはソートされているためexplorerpid、要求されたPIDを保持しtaskkill、プロセスを終了します。


ありがとうございました!しかし、何らかの理由でこれはまだ機能していません。私はそれを何らかの形で修正して機能させることができるかどうかを確認するために取り組んでいます。
ホッド-モニカの軍隊

1
@Dennis、 > explorerpidをメモリ使用量が最も多いexplorer.exeのPIDに設定します。それがメインプロセスを決定する最も信頼できる方法であるべきです。 いいえ、正しくありません。(たとえば、ショートカットを使用して)新しいウィンドウプロセスを開き、多くの写真のあるフォルダーに移動して、サムネイルモードで表示します。新しいプロセスは、メモリ使用量の元のプロセスをすぐに追い越します。 >さて、デフォルトの構成を使用していないことは言及していません。 問題は、どの「explorer.exe」プロセスが主なプロセスであるかをどのように確認できますか?他にどのようにそれが問題になると思いますか?
Synetech

ウィンドウアプローチとメモリアプローチの両方が機能するようになりました。私は窓付きで行くと思う-より信頼できるようだ。どうもありがとう!
モニカの軍隊

3

おそらく、エクスプローラーにタイトルバーにパスを表示するように指示し、WINDOWTITLEそれを基にフィルターを使用してそれを強制終了できますか?

  • エクスプローラーを開く
  • 押す Alt
  • 「ツール(メニュー項目)」をクリックします
  • 「フォルダオプション...(メニュー項目)」をクリックします
  • [フォルダオプション]の[表示(ページタブ)]をクリックします。
  • [フォルダオプション]の[タイトルバーにフルパスを表示する(クラシックテーマのみ)]をクリックして選択します。
  • 「適用」->「OK」をクリックします

このパスは、エクスプローラのタイトルバーに「非クラシック」テーマと共に表示されませんが、(現在)そこにあります。見えないだけです。

taskkill /F /FI "WINDOWTITLE eq C:\PathToThing\RunningInExplorer\ToRestart*"

一時的にクラシックテーマに切り替えて、再起動するExplorerインスタンスのパス/タイトルを決定する必要がある場合があります。

100%確実なわけではありませんが、タイトルにその(部分的な)パスを持たないExplorerウィンドウは、少なくとも安全です。:)

編集:

タイトルが「N / A」の場合は、バッチファイルを使用して、TASKLISTの結果をトークン化し、それらのトークンの結果を使用してTASKKILを使用してPIDで強制終了できるようにする必要があります。

これに対処するStackOverflow.comへの回答を見つけました。

質問Taskkillから無題のプロセスですか?このバッチファイルの例を含むこの答え次のとおりです。

@echo off
SETLOCAL enabledelayedexpansion
for /f "tokens=*" %%a in ('TASKLIST /V') do (
  set s=%%a
  set p=!s:~27,5!
  set t=!s:~152,3!
  if '!t!'=='N/A' ECHO TASKKILL /PID !p! /T
)

「TASKLIST / V」コマンドをExplorer.exeなどにより具体的に変更する必要がありますが、適切な開始点が得られるはずです。


私が殺したいプロセスが主なものです。tasklist /fi "imagename eq explorer.exe" /v /fo listそのウィンドウタイトルが「N / A」であることを教えてくれます。残念ながら、「 "windowtitle eq N / A"」は機能しません。何か案は?
ホッド-モニカの軍隊

ああ わかった。StackOverflowでその答えを見つけたので、関連するビットを使用して、リンクを使用して答えを更新します。
Ƭᴇcʜιᴇ007

これがどのように機能するかはまだわかりません。デスクトップ以外に開いているエクスプローラーウィンドウがない場合はどうなりますか?
Synetech

1

最も低いPID(プロセスID)を持つプロセスを強制終了します。プロセスは順番に番号が付けられるため、最初に開始されていました。


+1これはバッチファイルが初めて実行されるときに機能しますが、explorer.exeが再起動されるため、新しい「メイン」プロセスのPIDが高くなります。別の方法はありますか?
ホッド-モニカの軍隊

これは本当です。ただし、出力してtasklist | find /f "explorer"から、(ユーザー入力を使用して)殺す最低のPIDを尋ねるだけです。
ミスリル

@HodofHod:最も信頼できる方法は、メモリ使用量が最も多いプロセスを選択することです。MinGW(sedawkなど)を使用できる場合、それは非常に簡単に自動的に実行できます。そうでない場合は、ユーザー入力が最良の選択かもしれません。
デニス

@ Adam543i、>最も低いPID(プロセスID)でプロセスを終了します。プロセスは順番に番号が付けられるため、最初に開始されていました。 Windowsのどのバージョンについて話しているのですか?これは単に真実ではありません。ランダムPIDセキュリティ機能とは別に、OldNewThingで、PIDが(4または16などの)間隔で割り当てられていることを思い出します。事実、PID(相対的なものも含む)の使用はあまりにも信頼性が低いということです。
Synetech

@Dennis、>最も信頼できる方法は、メモリ使用量が最も多いプロセスを選択することです。 いや。どういたしまして。生成されたプロセスのメモリ使用量を増やすのは非常に簡単です。
-Synetech
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.