Explorer Problem - afterword again
2001年03月06日 07:00
さて、エクスプローラ問題として知られる話題の追加記事です。まず Ks さんのサイトに紹介されていた ShellControl ですが、Lars Hanson さんが同名のファイル名でアーカイブを公開していました(Shellsrv.exe というサービスでシェルの値を書き換えるらしい)。
彼の説明によると、
ShellControl is a set of programs that enables each user on an NT machine to have an individual shell (explorer, progman, litestep etc).
“Doesn’t NT already support this?”
Yes and no. The OS itself checks for user specific shells (in HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon) and starts the correct one. However, both MS explorer and Programmanager have a bug that prevents them to work with the shell set in HKCU.
Neither of the programs check for a shell setting in HKCU (HKEY_CURRENT_USER) and only checks in HKLM (HKEY_LOCAL_MACHINE). This has the effect that if you set progman.exe to be the shell in HKCU and then start explorer, explorer will try to take over as shell and progman will possibly freeze.
ShellControl は、NT マシン上でログインする個々のユーザがそれぞれ別のシェルを使えるようにする、一群のソフトウェアを指しています。
「NT は既にそういう機能をもってたんじゃなかったか? 違うの?」
どちらとも言えません。OS そのものは、レジストリのカレント・ユーザ・ハイブにあるシェルの値をチェックし、シェルとして機能するプログラムを起動します。しかし、エクスプローラとプログラム・マネージャはどちらもバグを抱えており、カレント・ユーザ・ハイブで指定されたシェルと同時には動けなくなっているのです。
どちらのプログラムもカレント・ユーザ・ハイブで指定されているシェルをチェックしておらず、ただローカルマシン・ハイブで指定されているシェルしかチェックしません。その結果、あなたがカレント・ユーザ・ハイブでプログラム・マネージャをシェルに指定したという条件のもとでエクスプローラを起動すると、エクスプローラはシェルの身分を奪おうとするでしょう。そしてプログラム・マネージャはフリーズしてしまうわけです。
で、これもログインするときのスクリプトに追加してローカルマシン・ハイブの方の値を書き換えるわけです。うむ。そういうわけで、やはり使うシェルの選択肢にエクスプローラを入れるという状況では、エクスプローラをシェルとして使う場合はローカルマシン・ハイブの値をエクスプローラにしてログインし直すのが最善と思われます。ていうか RunAs で管理者権限を奪ってローカルマシンの値を書き換えるにしても、パスワードが分からなければできません。パスワードが分かっているなら管理者としてマシンを使っているのと変わりませんから、無理に権限を制限することもないであろうというわけです。個人で使っていても管理者権限で例えばネットにアクセスしたくないという場合は、一時的に管理者権限へ・・・う~む。ログインし直してもあんまり手間は変わらないかな~。
さてそれと、シェル・マネージャをシェルとして登録するという方法がありますね。LiteSpawn = Ice.exe やすなふきんをシェルとして登録する。これは例えばすなふきんの動作を見ても十分に有効な方法です。但し二つの点に留意する必要があるでしょう。一つは、そもそもすなふきん等のシェルマネージャをローカルマシンのハイブにシェルとして登録するためには管理者権限でマシンを使えなければならない、ということ。そしてもう一つは、シェルマネージャが常駐することです。こうした環境を望むユーザがどれくらいおられるかは分かりませんが、シェルマネージャを常駐させてまで頻繁にシェルを切り替えるようなユーザはそれほどいない筈ですし、しかもその選択肢にエクスプローラが入っているユーザはもっと少ないでしょう。しかし管理者権限でマシンを使っているユーザーなら、何も問題はありません。レジストリ・エディタを起動して書き直すのも手間ですから、もっとすなふきんをありがたく活用させていただきましょう。
そもそもこの問題は「管理者権限をもたないユーザがどうやって互換シェルを使うか」という問いに始まっています。いつでも管理者としてログインし直せる個人ユーザ(僕もそうですが)は、この際どうでもよろしい。エクスプローラ問題は、オフィスなどで他人の迷惑を顧みず互換シェルを使うようなユーザ(笑)を救済するために解決しなければならないわけです。あるいは家庭でも、家族はエクスプローラだけど自分は互換シェルを使うというなら事情は同じです。まあいまのところ、現実的な対策としては「互換シェルを使う人が譲って、いかなる状況でもエクスプローラを起動しないような設定を組む」というのがよいでしょうね。コントロール・パネルのアプレットは全ていきなりダイアログを出すとか(コンパネを開けば、当然ながらエクスプローラが起動しますから、一緒にシェルとしてのエクスプローラも起動してしまいます)。
