Windowsの拡張子関連付けが狂ったゴミ
コマンドラインからassocとftypeでなんとかなると言われているし、僕もそう思っていたが、どうもダメらしい。コマンドラインによる設定とGUI設定が食い違っていて、コマンドライン側でいくらやっても有効にならない。GUIが優先するようだ。
情報はレジストリに記録されている。Powershellで、
PS> cd HKLM:\SOFTWARE\Classes
PS> ls .*
で登録された拡張子の列挙ができる。なお、HKLMはHKEY_LOCAL_MACHINEのPowershellドライブ名だ。 ls .\.html
とかして拡張子に関わる情報を見ることができる。OpenWithProgids項目の値が配列で、拡張子に関連づいた“型名”らしい。
HKLM:\SOFTWARE\Classes 内に“型名”ディレクトリもあって、HKLM:\SOFTWARE\Classes\型名\shell\open\command の値がstartとかで使わえる“はず”(実際は違う)。ftypeはこの値を取っている。つまり、assoc, ftypeのすることは、HKLM:\SOFTWARE\Classes を目で見ていじるのと同じ。
一方、GUIの「ファイルの種類またはプロトコルのプログラムへの関連付け」は別な情報を表示する。この情報は、HKEY_USERSのほうに入っていて、HKYE_USERSがHKYE_LOCAL_MACHINEより優先するようだ。
[追記]
HKEY_CURRENT_USER\Software\Microsft\Windows\CurrentVewsion\Explorer\FileExts\ の下のようだ
PS> cd HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
で行ける。http://d.hatena.ne.jp/vanista/20100908/1283924837 にもそのような記述が。
過去の変更の履歴が、a,b,c,... に記録されていて、順番がMRUListに入っているようだ。UserChoiceが現在の設定らしい。
いずれにしても、assoc/ftypeコマンドは頓珍漢な所を見たり操作したりしている。
[/追記]
設定する場合も、GUIは、HKEY_CURRENT_USER(HKEY_USERS)をいじるらしく、結局コマンドからはほんとの設定が見えないし触れない。
HKEY_CURRENT_USERの当該項目をクリアすればHKEY_LOCAL_MACHINEが見えるかもしれないが怖くて出来ない。他のユーザーになってやってみると、事情が分かるかもしれない。
Windowsのレジストリ構造がとんでもなくグチャグチャで、もはや破綻しているようだ。
IrfanView事件
画像ファイルの関連プログラムにIrfanViewを設定していた。c:/Installed/iview425j/にIrfanViewを入れていた。いつのまにか、c:/Installed/iview425j/が改変されてIrfanViewが実行できないし、関連付けも解除されていた。
やったのは、セキュリティソフト(Norton)だろう。新しいIrfanViewを入れて、ftype jpegfile=C:\Installed\iview440_x64\i_view64.exe "%1"
とかやってみたがダメ。
GUIからの設定でも、IrfanViewは設定できない。設定できたように見えてもすぐに解除されてデフォルトに戻ってしまう。
MassiGra(http://www.vector.co.jp/soft/dl/win95/art/se400675.html)というモノをダウンロードして、これを指定したら設定できる。IrfanViewはひどく嫌われていて、MassiGraは大丈夫のようだ。
セキュリティソフトとレジストリが絡むと気が狂ったような事象が起きる。