このドキュメントは、Windows2000以上の環境で、レジストリを直接編集することによりファイルの拡張子とその関連づけの設定を行うための指南書として作成したものです。
通常、ユーザーレベルでファイルの関連づけを設定するには以下の方法が提供されています。
しかし、トラブルが起こった場合上記の設定を弄くるだけでは解決しない場合も多々あります。(往々にしてそういうトラブルの解決策はネット上にすら存在しません。)そういった場合、最終手段としてレジストリを直接編集し、拡張子とその関連づけを設定し直す必要があります。
このドキュメントは、そのような局面において「広大なレジストリのどこを編集すれば良いのか?」を解説するものです。
なお、このドキュメントは 無保証であり、無保障です。このドキュメントを参考にした操作により発生したいかなる現象も、操作を行った者の自己責任となります。ありきたりですが予防線でした。
このドキュメントを読む対象としては、レジストリエディタを起動し、操作できる人間を仮定しています。「レジストリエディタって何?」とか、「キーの追加ってどうやるの?」という方は、まずは「regedit.exe」などで検索し、使い方を覚えてからこのドキュメントを利用してください。(残念ですがそこまで手が回らないッス・・・)
ファイルの拡張子とその関連づけを保っているレジストリとそのキーを以下に示します。
このように、実際に操作するレジストリの範囲は案外と狭かったりします。しかし、今までレジストリをさわったり弄ったことのある人なら次の疑問が生じるかもしれません。
「HKEY_CLASSES_ROOT(HKCR)キーは操作しないのですか?」
これに対する答えとしては、
「HKCRはHKLM\SOFTWARE\Classes + HKU\(ユーザー識別子)\Software\Classes\Applications である」
つまり、HKEY_CLASS_ROOTはエイリアス(別名)であり、あくまでも「現在ログイン中のユーザー設定の確認用」として使用すべきなのです。実際に編集すると分かりますが、HKLM\Software\Classes や HKU\...\Software\Classes\Applications に対して行った変更は直ちに HKCR 以下にも反映されます。
本ドキュメントでは、「HKCRの実体は別にある」ことを明確にするため、あえてHKCRではなくその元となるHKLMやHKUを操作することにします。
最初に行うのは、HKLM\Software\Classes 以下に「ProgID」と呼ばれる形でアプリケーションを登録することです。
結論から先に言ってしまうと、Windowsのエクスプローラ(と言うよりは"シェル")は、ファイルがダブルクリックされると以下の順でたどっていきます。
拡張子 → 拡張子に設定された ProgID → ProgID に設定された実行ファイル本体
従って、とにもかくにも "ProgID" を登録しないと始まらないわけです。
C:\Program Files\Hoge\hoge.exe "%1"
この時点までを自動登録するファイル「hoge1.reg」の内容を示します。
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Hoge.Document] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Hoge.Document\shell] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Hoge.Document\shell\open] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Hoge.Document\shell\open\command] @="\"C:\\Program Files\\Hoge\\hoge.exe\" \"%1\""
続いて拡張子を登録します。今回は「.hoge」という新たな拡張子を設定してみます。
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.hoge] @="Hoge.Document"
・・・実は、たったこれだけで拡張子の関連づけができてしまいます。後の細かい設定は、エクスプローラの「ツール」→「フォルダオプション」→「ファイルの種類」で行う方が良いと思います。アイコンとかの設定は、そちらから行った方が断然楽だと思います。
まだシステムに登録していない拡張子のファイルをダブルクリックすると、開くアプリケーションを選択する画面が表示されます。そこで自分でアプリを選択すれば、自動的にその拡張子の関連づけを行ってくれます。この裏側では何が行われているのでしょうか?
結論から言うと、「拡張子_auto_file」という ProgID を自動的に生成しています。
上の例で言うなら、自動的に以下のエントリを設定してくれるわけです。
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.hoge] @="hoge_auto_file" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hoge_auto_file] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hoge_auto_file\shell] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hoge_auto_file\shell\open] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hoge_auto_file\shell\open\command] @="\"C:\\Program Files\\Hoge\\hoge.exe\" \"%1\""
著者がこのドキュメントを公開する直接の動機は、「プログラムから開く」でプログラムを参照できないというトラブルに見舞われた経験から来ています。(原因そのものは非常に単純なものでしたが・・・)
しかし、トラブルに見舞われずとも「プログラムから開く」で表示されるプログラムの一覧はどこから来ているのか、不思議に思われている方も多いのではないでしょうか?さらに不思議なのは、一度でも「参照」で自分で設定したプログラムは、自動的に一覧に登録してくれる点です。
ここではそのからくりについてみていきます。からくり・・・と言っても、その原理は驚くほど単純です。
(Excluding your applications from "Open With..." dialog box list.)
結論から言うと、「プログラムから開く」(英語だと「Open With...」)に表示されるプログラムの一覧は、次のレジストリキー以下にあります。
HKEY_LOCAL_MACHIN\\SOFTWARE\Classes\Applications
ユーザーが「参照」で自分で指定したプログラムの一覧は、次のレジストリキー以下に保存されます。
HKEY_USERS\(ユーザー識別子)\Software\Classes\Applications
では、今回の例に従い実際に「hoge.exe」を追加してみます。ユーザー別ではなく、HKLMの方を利用してみましょう。結論から提示します。以下の自動登録ファイルのようになります。
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\hoge.exe] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\hoge.exe\shell] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\hoge.exe\shell\open] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\hoge.exe\shell\open\command] @="\"C:\\Program Files\\Hoge\\hoge.exe\" \"%1\""
"ProgID"の登録の時と似ています。ユーザーが自分で「参照」で選択した場合、 HKU\...\Classes\Applications 以下にこれと同様のキーとエントリが追加されます。
しかし、実際には HKLM\Software\Classes\Applications には一覧で表示されるよりも遙かに多数の .exe が登録されています。それらはなぜ表示されないのか?結論から言うと、「NoOpenWith」エントリが存在するからです。
NoOpenWith エントリ自体は中身が空の文字列ですが、これが設定されているキーは「プログラムから開く」の一覧には表示されません。
(How to delete history from "Open With..." sub menu)
これはインターネット上でも広く知られているTipsです。
HKEY_USERS\...\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
上記中に、これまでユーザーが開いてきた拡張子の一覧がキーとして登録されています。さらにその中の "OpenWithList" 中に、a から始まるエントリが存在します。それがこれまでそのファイルを開いてきたプログラムの履歴となります。
履歴を削除するには、好みのエントリを削除すれば良いわけです。
著者自身が遭遇したトラブルは、"「プログラムから開く」でプログラムを参照できない」"という珍妙な現象でした。原因は単純で、C:\Program Files 以下にインストールしたフリーソフトのエディタを、丸ごとマイドキュメント以下に移動したことが原因でした。
詳しく説明すると、C:\Program Files 以下にインストールした時点で、一度「プログラムから開く」で参照できました。「プログラムから開く」の一覧にも表示されていました。この時点で、HKU\...\Software\Classes\Applications 以下にそのエディタのキーが登録されます。(利用したエディタは、インストーラなど無く、圧縮ファイルで展開されたフォルダ中のexeを実行すればそれで済むタイプでした。)
いけなかったのはその後で、エディタの入っているフォルダをマイドキュメント以下に移動してしまったのです。
これにより、「プログラムから開く」一覧を生成する際に「参照先が存在しない」として表示されません。さらにまずいのは、エントリ自体はすでに存在するため、「参照」で移動先のプログラムを指定しても修正されず、結局、プログラムを参照できない状態に陥ったわけです。(試しに適当なフリーのエディタをDLし、実験してみてください。フォルダ名を変更するだけで発現します)
この場合の解決策としては、HKLM\Software\Classes\Applications または HKU\...\Software\Classes\Applications 中の該当プログラムのエントリを一度削除します。その後、改めて「プログラムから開く」で移動先のプログラムを参照すれば、新規エントリとして正常に追加されます。
2008年11月時点での参考URLです。
記事作成当時は下記URLを参考にしたのですが、サイト構成などが変更されたようで、現在全てLOSTしています。
コメント