トップ回答者
Windows7のExplorer.exeがプロセスに残る

質問
-
Windows7でウィンドウズエクスプローラ「explorer.exe」を起動する時は、普通はWin+Eかショートカットを使っていますね。
するとタスクバーなどを表示しているexplorer.exeとは別のプロセスのexplorer.exeが起動します。マイクロソフトの
sysinternalsにあるProcessExplorerを使うと、explorerがどのような親子関係で起動されているかわかります。タスクバー等の表示をしている初期起動のexplorer.exeはsystemやwininit,system,scrss等と同列に独立したプロセスで起動しています。しかし新たにユーザーが起動したexplorerは以下の場所に起動します。
wininit - servicies.exe - svchost.exe - explorer.exe
更に3つめのエクスプローラを立ち上げると、この同じsvchost.exeの下に並行してexplorer.exeが起動します。つまり初期起動のエクスプローラーの子プロセスではなく、他のwininitの孫プロセスとして起動しているのです。
さてこの状況を理解頂いた上で、ここから問題になるのは、これらの新たなexplorer.exeが、そのフォームを終了してもプロセスだ
け残っていると言う事です。explorer.exe単体では自動的にプロセスも終了してくれますが、エクスプローラーから何か別のソフトを起動してい
て、子プロセスに何かがあるときは終了しにくいようです。本来その子プロセスを、タスクバー等の表示をしているexplorer.exeプロセスに引き渡
して、自らはプロセスを終了するのが正しい動作のようです。しかしそうならないで、いつまでもexplorer.exeのプロセスが残り、下手をすると3
つも4つもwininitの孫に並んでいたりします。その結果起きてくる弊害として、画像ファイルのサムネイル表示が停止してしまったり、フォルダやファイルの重複アクセスによるロックなどが
起きます。勿論メモリーの解放も為されないようで、ログオフ時に終了出来ないプロセスが残っているメッセージが出ます。大抵は自然に強制終了するので、殆
どの人がこの問題に気づいていないようです。が、一部ではこのexplorer.exeプロセスが残って終了しないと言う問題を、Windows7発売当
初から気づいていて未だに修正されないバグだろうと指摘しているサイトもありました。explorer.exeを別プロセスで起動するのは経験上良いことだと考えています。しかしそれが使い終わってもプロセスだけ残ると言う
のは困ります。操作上でも弊害が出る以上、バグとして修正をして頂くべき問題だと思うのですが、今まで更新パッチを全て当てても未だに直らないとなると、
皆さんは気づいておられないのか、それとも仕様という事で放置されているのでしょうか、あるいは何か解決する特別な手段があるのでしょうか。情報をお持ちの方、よろしくお願い致します。
2014年3月22日 11:51
回答
-
Sakaiさん、こんにちは。
詳細はわかりませんでしたが、調べた限りではサムネイルキャッシュ関連のファイルハンドルをすぐに閉じられないことが原因と思われます。
KB2025703(*1)によると、thumbs.dbファイルに対するハンドルを動的かつ適切なタイミングでリリースするメカニズムが実装されていないために、ネットワークフォルダーで似たような事象が起きるようです。
Windows Vista以降ではローカルファイルのサムネイルは個々のディレクトリではなく %localappdata%\Microsoft\Windows\Explorer\thumbcache_*.db で管理されるようになったため、ネットワークフォルダーのようにフォルダ名を変更できないというエラーは起きないようですが、タイムリーなファイルハンドルのリリースができないという部分については同じことが起きているものと思われます。
デバッガで動作確認しましたところ、explorer.exeプロセスには、(Windows OS内部の)タイマーを使い、およそ1分間隔で動作しているスレッドが存在していました。また、残ったexplorer.exeプロセスの終了時にはまずthumbcache_*.dbのハンドルを閉じていました。
以降は推測になりますが、タイマーを使って定期的にサムネイルキャッシュ関連の仕事をしているスレッドがいるため、プロセスを閉じるためにはそのタイマーの時間が来るのを待たなければならない、ということかと思われます。
この問題ですが、Windows 7のみの問題ではないようですので(詳細はわかりませんが)何かしら解決の難しい原因があるように思います。
なお以下は補足ですが、初期起動のexplorer.exeプロセスの親はuserinit.exeプロセス(winlogon.exeの子プロセスで、ログイン時にユーザー環境を初期化するプロセス)です。Process Explorerのプロパティで親だったプロセスのPIDを確認することができます。
また、Windows 7の初期状態ではフォルダーオプション(*2)の「別のプロセスでフォルダー ウィンドウを開く」は無効になっているため、多くの方の環境ではexplorer.exeプロセスは1つしか稼働しておらず、この問題には気付かれないのかもしれません。
ご参考になりましたら幸いです。
(*1) http://support.microsoft.com/kb/2025703/ja
(*2) http://windows.microsoft.com/ja-jp/windows7/change-folder-options- 回答の候補に設定 Hebikuzure aka Murachi AkiraMVP 2014年3月24日 5:25
- 回答としてマーク 佐伯玲 2014年4月1日 2:39
2014年3月23日 12:10
すべての返信
-
Sakaiさん、こんにちは。
詳細はわかりませんでしたが、調べた限りではサムネイルキャッシュ関連のファイルハンドルをすぐに閉じられないことが原因と思われます。
KB2025703(*1)によると、thumbs.dbファイルに対するハンドルを動的かつ適切なタイミングでリリースするメカニズムが実装されていないために、ネットワークフォルダーで似たような事象が起きるようです。
Windows Vista以降ではローカルファイルのサムネイルは個々のディレクトリではなく %localappdata%\Microsoft\Windows\Explorer\thumbcache_*.db で管理されるようになったため、ネットワークフォルダーのようにフォルダ名を変更できないというエラーは起きないようですが、タイムリーなファイルハンドルのリリースができないという部分については同じことが起きているものと思われます。
デバッガで動作確認しましたところ、explorer.exeプロセスには、(Windows OS内部の)タイマーを使い、およそ1分間隔で動作しているスレッドが存在していました。また、残ったexplorer.exeプロセスの終了時にはまずthumbcache_*.dbのハンドルを閉じていました。
以降は推測になりますが、タイマーを使って定期的にサムネイルキャッシュ関連の仕事をしているスレッドがいるため、プロセスを閉じるためにはそのタイマーの時間が来るのを待たなければならない、ということかと思われます。
この問題ですが、Windows 7のみの問題ではないようですので(詳細はわかりませんが)何かしら解決の難しい原因があるように思います。
なお以下は補足ですが、初期起動のexplorer.exeプロセスの親はuserinit.exeプロセス(winlogon.exeの子プロセスで、ログイン時にユーザー環境を初期化するプロセス)です。Process Explorerのプロパティで親だったプロセスのPIDを確認することができます。
また、Windows 7の初期状態ではフォルダーオプション(*2)の「別のプロセスでフォルダー ウィンドウを開く」は無効になっているため、多くの方の環境ではexplorer.exeプロセスは1つしか稼働しておらず、この問題には気付かれないのかもしれません。
ご参考になりましたら幸いです。
(*1) http://support.microsoft.com/kb/2025703/ja
(*2) http://windows.microsoft.com/ja-jp/windows7/change-folder-options- 回答の候補に設定 Hebikuzure aka Murachi AkiraMVP 2014年3月24日 5:25
- 回答としてマーク 佐伯玲 2014年4月1日 2:39
2014年3月23日 12:10 -
フォルダオプションで「エクスプローラのプロセスを分離する」のチェックを外してから、随分長く様子を見ていました。
最近ではネットワークドライブ上の画像ファイルのサムネールは、Windows内のサムネイル用キャッシュが500MBになるまでは正常ですが、それ以後は読み込まなくなりますので、ディスククリーンを実行してキャッシュを消し、再起動すれば再びサムネイル表示が可能になることを見出しました。
しかしエクスプローラのプロセスが相変わらずデスクトップ用エクスプローラと個別に生成され、それが終了しないままプロセスに居残ると言う事態には変化がありません。通常のタスクマネージャで見るとexplorer.exeが多数並ぶ事があります。ProcessExplorerではこれらがsvchostの下なのかどうかを判別出来るので、余計なexplorer.exeだけを終了すると、サムネイル表示が復旧したり、ロックされたままのファイルなどが解放されたりします。
これはWindows7の仕様のようなものなのでしょうか。それともバグでしょうか。Hiromu Kondoさんの調査結果は大変参考になりましたが、逆にマイクロソフトはこの異常な動作を認知し、なお改善しようという意志があるのかどうか疑わしいと思わざるを得ませんね。
そのあたりフォーラムオペレータの佐伯さんの範疇ではないかも知れませんが、取り敢えず問題提唱者の私からの実験報告です。
よろしくお願い致します。
2014年5月25日 11:16 -
不適切と思われるような動作であっても、既知のもの以外はバグであるかどうか、また修正の可能性があるのかどうかはここ (フォーラム) では確認できないので、公式のサポート窓口にご相談されると良いでしょう。適切なサポート契約があれば、修正のリクエストを行えます。
サポート窓口 : http://www.microsoft.com/ja-jp/services/support.aspx
hebikuzure
2014年5月26日 7:34 -
hebikuzureさんのお名前には覚えがありました、お世話になっております。
このフォーラムではオペレータもいらっしゃることですし、公式な場としてテクニカルな問題を議論できると思っておりました。サポート窓口に連絡せよというのはその実、折角フォーラムで議論しようとしている事案に対して場違いな指摘に思えます。また上記文言は他のどの未解決事案についても同じ文章で有効とも見え、なかなか解決しない難しい問題に対して行き詰まりの終止符を打つためだけの意味しか見いだせません。
サポート窓口を調べてみましたが、本事案を質問できるような選択肢は見つかりませんでした。元々想定されているような問題を議論しているわけではないのですから、窓口が存在しないとしても不自然には思いません。むしろそうした問題に対して、皆で知恵を出し合うのがこうしたフォーラムの存在意義ではないのでしょうか。
私としては現状での報告までとしておきます。長らくお待たせしてしまい、オペレータの方に解答マークをして頂いた事案でもありますので、発言者としてその後の状況をお伝えする必要を感じました。解決出来ない問題であるのならば、そのまま気をつけて使うしか無い事もあります。しかし少なくともサポート窓口に相談せよで終わってしまうのは、このスレッドを立てた意味を失わせるものですので看過できませんでした。
よろしくお願い致します。
2014年5月28日 12:31 -
このフォーラムで何を議論したいのですか?
それがバグかどうか、ですか?
バグの原因が何か、ですか?
そんなこと、どうでもよいのですが。
それで何か具体的に困ってることでもあるなら、何とか考えようという気にもなりますが。
なので、サポート窓口へ行ってください。というのが個人的見解です。
explorerの兄弟分のieでも同じような話があります。
- 編集済み ウィンドウズスクリプトプログラマ 2014年5月30日 5:04
2014年5月28日 12:59 -
以前の投稿で書かれている
これはWindows7の仕様のようなものなのでしょうか。それともバグでしょうか。Hiromu Kondoさんの調査結果は大変参考になりましたが、逆にマイクロソフトはこの異常な動作を認知し、なお改善しようという意志があるのかどうか疑わしいと思わざるを得ませんね。
の部分について、このフォーラムの目的や内容から相応しくないので、サポートへのご相談を提案させていただきました。
仕様かバグかは公式のドキュメントに書かれているか、またはサポート窓口での回答でなければ判じる事ができません。お抱えのトラブルについては類似事例の情報なども断片的にしかないようで、広く影響を与えるような一般的な問題とは思えない状況です。となると (実際に非常に特殊なトリガーが必要であるとしても) 製品自体の不具合であったとしても Microsoft が把握していない現象である可能性もあります。
こうした場合、Microsoft が公式に現象を把握する窓口となるのがテクニカル サポートですから、本当にバグなのか確認したく、またバグであれば修正が必要なのであれば、テクニカル サポートを利用するのが一番の方法です。
なお、どのような窓口を利用するのが適切か分からない場合は、まずサポート契約センターで相談されると良いでょう。
- サポート契約センター
- TEL : 0120-17-0196 FAX : 0120-74-0196
営業時間 : 9:00-17:30 (土日祝日、弊社指定休業日を除く)
hebikuzure
- 編集済み Hebikuzure aka Murachi AkiraMVP 2014年5月30日 11:51
2014年5月30日 11:48 -
ウィンドウズスクリプトプログラマさんの文脈は?マークが並び詰問調ですので、短気あるいは立腹の感情を読み取れます。感情基盤であるならば議論の場への投稿は自粛して頂きたいものです。
「何か具体的に困ってること」は投稿をよく読んで頂ければ理解できるはずです。また同様の現象で困っている記事を他のブログでも見ましたので、私の独りよがりな問題では無かったはずです。他に回答頂いた方は私の困っている内容を理解された上で投稿されていることが解ります。それ故ウィンドウズスクリプトプログラマさんが、私の「何か具体的に困ってること」をわからないのでしたら、読解力の差ではないかと思います。
ご紹介のiexplorer.exeのスクリプト制御についての記事は読ませて頂きましたが、やはり私の勘案しているexplorer.exeの挙動不審とは現象が異なるものと考えられます。
既にデスクトップUIとして起動済みのタスクバーが最初のexplorer.exeプロセスであり、その親は<Non-existent Process>(1064)とあります。一方で問題になっているexplorer.exeの別プロセスの多重起動は上記で起動しておきながらすぐにwinnt.exe->services.exe->svchost.exe->explorer.exeに移されるものであり、ASPDaemon.exeやWmiPrvSE.exeなどが並立しているものであって、ウィンドウを閉じてもここに並ぶexplorer.exeプロセスはkillされないと言うものです。そのためファイルロックが解かれずに問題を引き起こしています。エラーメッセージはありません。これらの仕組みは普段は起動していないiexplorer.exeとは状況が異なるものと考えます。インスタンスとして起動しフォームが消えても、なおメモリを解放せず、他のファイルをロックしたままです。
マイクロソフトコミュニティのオペレータからこちらで質問するのが適切であると紹介頂きました。ですからこちらで質問したこと自体には問題を感じておりません。ウィンドウススクリプトプログラマさんの個人的見解であっても、公の場に投稿する以上は、問題を理解せずに切って捨てるような見解を投稿すべきではないだろう、と私なら考えます。
既に書きましたが、サポート窓口に何でも丸投げしようという事では、このフォーラムの存在意義を見失っているのではないか、と言うのが私の考えです。知恵を出し合い、情報を出し合い、サポート窓口以前でユーザー同士で協力して解決に結びつけて行こうと言う場であるべきではないかと思っております。
よろしくご勘案ください。2014年6月12日 5:56 -
Hebikuzureさんの御意図は了解致しました。
確かにマイクロソフトへの疑義を書き込んだのは私の気の緩みでした。マイクロソフトが公式に把握しているかどうかは、私にとってはあまり重要な問題ではありません。今回のエクスプローラの挙動不審について、どなたか情報を持っていないのだろうか、と言うのが投稿の主旨です。
海外サイトも含めて随分検索しましたが、この問題についての解決策が見つからなかった事から、こちらから質問する形で手がかりを得ようとしました。この場もマイクロソフトのサイトですから、その手の専門知識の方がいれば、何らか情報が得られるかと言う期待がありました。
結論として、どなたもこの問題についての解決策をお持ちで無く、開発元の正式なサポート窓口に問い合わせるしか残されていないと言う事ですね。
ただしこの問題についてのサポート窓口はサイト上には見つからなかったと書きました。Hebikuzureさんの推奨は、電話では多彩な質問が出来ると言う事であれば、それが問題解決への最善の策であると言う意味で受け止めました。
この場に現象の説明と問題の提起が出来たことで、投稿した甲斐があったと思います。他にも御回答頂いた皆様、ありがとうございました。2014年6月12日 6:01 -
Microsoft のサポートだと、一番安い (または製品の無償サポートとして提供される) パーソナル サポートだと How to や Usage、既知の問題に対する一般的トラブルシュートしか対応できないので、今回のような問題の場合、最低でもプロフェッショナル サポート以上の契約での問い合わせが必要になります。
ただし MSDN などのプログラム特典が無ければ最低でも1件の問い合わせで 31,800円 (税抜き) の必要になりますから、Microsoft のモデレーターさんとしては安易に案内できない、という事情があるようです。
http://www.microsoft.com/ja-jp/services/professional.aspxとは言え、ある程度の必要がかかる可能性があっても何らかの技術的対応が必要だと判断されるのであれば、サポート窓口の利用が一番良いと思います。
hebikuzure
2014年6月12日 9:30 -
2014年5月25日の投稿で、「別のプロセスでフォルダー ウィンドウを開く」のチェックを外して経過観察をしていた事を投稿しました。確かに以前はデスクトップUIの共倒れを懸念してチェックを入れていました。それでデフォルトに戻した上で大分状況を見ていた結果を報告したわけです。しかしそれでも問題は解決しないので、フォルダーオプションの設定とは無関係に起きている問題ではないかと考えています。
WindowsXPではこのオプションを入れておくと、キーボードショートカットで起動したexplorer.exeはデスクトップUIと同一プロセスになり、デスクトップショートカット等から起動した場合は別プロセスになる、と言う再現性のある動作をしていました。ところがWindows7ではそのような再現性もありません。どちらにしても別プロセスが起動して、他のプロセスツリーの下につきます。多少は別プロセスのexplorer.exeがきちんとKillされてくれる事が増えたようにも思いましたが、私の使い方ではトータルに見て殆ど変わらないと言えそうです。
デスクトップUIとしてのexplorer.exeがエクスプローラーのウィンドウと共倒れでフリース等してしまうと、一旦プロセスをKillする時にタスクバーが消えます。再度explorer.exeプロセスを起動すればタスクバーは復元しますが、タスクトレイの復元は不完全にしか為されないのが従来の定番でした。完全にタスクトレイを復元するためには他のアプリケーションも全て終了して再ログオンが必要でした。その手間を省く為、出来るだけデスクトップUIを共倒れさせたくなかったわけです。しかしWindows7のタスクトレイは殆どきちんと回復するようではあります。その意味では、今後も「別のプロセスでフォルダー ウィンドウを開く」のチェックはデフォルト通り外したままで運用しようと思っています。
IEのプロセスが残る記事は確かに幾つか見かけました。WindowsExplorerと出自が異なるプログラムだと記憶していたため、あまり参考にしてきませんでした。またWindows2000やWindowsVistaなどのこれまで記さなかったバージョンにおいては詳細に確認していませんでした。問題がもっと話題になっていれば、あるいは余分に残留したexplorer.exeを自動的にkillしてくれるようなソフトを開発されていてもおかしくないと言う気もします。バッチファイルでexplorerを呼び出しておいて、終わったらkillすることも思い当たりましたが、プロセスIDを把握する方法がわからず頓挫しました。デスクトップUIのexplorer.exeだけファイルネームを変えた別ものにして、標準のデスクトップを変更してみたりもしたのですが、実行ファイル名が変わってもプロセス上の名前は変わらないようでしたので、やはり頓挫しています。 いずれにせよ今後ももう少し視野を広げて、この先も色々と状況を調べて行こうと思っております。
2014年6月14日 7:41 -
ieでもそうですが、タスクマネジャでコマンドラインを見ると、引数を持ってます。そういうものでvisibleなwindowを持ってないものはzonbieかも。
tasklist /vでは、desktop explorerはwindow titleがないけれど、他のはフォルダ名が出る。閉じると、titleが消える。desktop explorer以外でwindow titleがないものはzonbieかも。
当方では、「別のプロセスでフォルダー ウィンドウを開く」のチェックを外して、増殖するのを見たことがないのですけど、何か違う?32bit/64bitとか。当方は64bit。
また、「別のプロセスでフォルダー ウィンドウを開く」をチェックして、プロセスがプールされてはいても、再利用されていて、zonbieになってるのを見たことがないのですけど、何か違う?シェル拡張、セキュリティソフトなど。セーフモード、クリーンブート、シェル拡張を無効、などで発生傾向が変わるか調べてみたら。
もしも、問題が、thumbnailcacheの複数プロセスオープンにかかわる構造的なものなら、どちらかを避けるしかないかも。
2014年6月14日 8:57 -
自分も本日同様の問題が発生しました。
こういったExplorer関係の問題は情報を検索してもIEと混同されることがよくあり毎度困ったものです。
まず環境ですが、Windows7 SP1 64Bitで 「別のプロセスでフォルダー ウィンドウを開く」のチェックは外してあります。
発生条件はある程度の期間(1週間~1月以上)連続稼動しているとある時点から新しいエクスプローラウインドウを開くときに発生します。
ウインドウ数や期間に一定の法則はなく、正確な再現条件が不明でしたが、画像や動画があるディレクトリを開いたままにしておくと発生しやすい体感はありました。
上記投稿でサムネイル関係という話も出ているのでやはりそうなのでしょう。
発生する問題としては
エクスポローラ上のサムネイルが表示されなくなる、
エクスプローラ上のフォントがメイリオからゴシック(?)になる、
エクスプローラ上にファイルアイコンしか表示されなくなる、
エクスプローラウインドウの枠組みしか表示されなくなりウインドウが閉じられなくなる、
ウインドウそのものが表示されなくなる、等があり、
主に一度発生するとエクスプローラウインドウを増やすごとに上から下の症状へと発展していきます。
同時にデスクトップのアイコンをマウスオーバー等すると背景が無地になる、
アイコンの関連付けがおかしくなる(一時的なもの)、
タスクトレイのアイコンがマウスオーバー等すると消失する(場所自体は残っている)等も発生します。
ただ、今までこの症状が発生していたときはExplorerプロセスは増えていなかったこともあり、
複数プロセスが起動することはもしかすると直接の関連はないかもしれません。
今回は複数プロセスも発生し、たとえばWin+Eでは初期機動のExplorerでウインドウが開きますがタスクバーにピン留めされたエクスプローラーをクリックして起動するとwinnt.exe->services.exe->svchost.exe->explorer.exeで起動したりしています。
新規プロセスのコマンドラインは
C:\Windows\explorer.exe /factory,{75dff2b7-6936-4c06-a8bb-676a7b00b24b} -Embedding
で起動しており(初期起動のものは"C:\Windows\explorer.exe"と引数なし)
レジストリにはCLSID_SeparateMultipleProcessExplorerHostとして登録されています。
解消法としてはExplorer.exeそのものをKillして再起動すればよいのですが、
上記のとおりタスクトレイがソフトにより正しく復旧しないことがある、
開いていたウインドウは当然全て閉じてしまう等あるため
タイミングによっては迂闊にそれを実行できない場合もあります。
なにか根本的な解決策があればいいのですが現在は発生しないことを祈るしかないのでしょうね・・・。2014年11月29日 4:51