misc.log

日常茶飯事とお仕事と

MIME Typeとアプリの関連付け

Webからファイルをダウンロードした際に、同じファイルだけど特定のリンクだけ特定のアプリで動かす、なんてことができないかと思い、少し調べもの。

MIME Typeの指定

Webアプリなどでファイルをダウンロードさせる際には、その内容を表す「Content-Type」というヘッダー情報を用意して、そこにデータの種類を表す文字列を指定します。それがMIME Type*1と呼ばれるものです。

たとえば、Excel 2003以前のExcelファイルだと「application/vnd.ms-excel」と指定すれば、受けた側のクライアントPCで「あ、こいつはExcelで開けばいいのね」となってExcel 2003や互換モードのExcel 2010などが開きます。

さて、あるファイルだけ別のアプリで動かしたいというのならば、このMIME Typeに新しいものを用意して、それに「別のアプリ」を関連づければよさそうですね。新しいMIME Typeの定義はWebサーバー側でできますし、どうやらそれに対するアプリの設定もWindows側にあるようなので、事前に両者の取り決めと設定が必要ですが、なんだかできそうな気がしますね。

MIME Typeとアプリの関連付け

MIME Tyhpeは、直接アプリと関連付けられていませんでした。MIME Typeとアプリの関連付けの間に、拡張子との関連づけが入っていたのです。簡単に書くと、

  [application/vnd.ms-excel] ⇒ [.xls] ⇒ [C:/Program Files/…/Excel 2003本体.exe]

のようになっていました。

MIME Typeと拡張子の関係は、レジストリの「HKEY_CLASSES_ROOT(長いのでHKCRと略記)」にある拡張子ごとの設定に記載されていました。こんな感じです。

f:id:frontline:20150602171148p:plain

拡張子に対する実際のアプリの設定は、上記の「Excel.Sheet.8」のようなファイルタイプ名に対するレジストリ設定、同じくHKCRにある「/Excel.Sheet.8」に記載されています。

ということは、

  • MIME Typeを新設しても、拡張子としか関連付けられない。
  • 既にある拡張子に対して、2つのMIME Typeを指定することはできないようだ。
  • となると、新設したMIME Type に対する新しい拡張子を用意する必要がある。

ということになりそうです……。それはちょっと違うんだよな。
残念ながら、今やりたいことには使えなさそう。

ということで、とりあえずMIME Typeとアプリの関連付けに関するメモでした。

Windows 7 レジストリ徹底活用マニュアル

Windows 7 レジストリ徹底活用マニュアル

*1:MIME Type: Multipurporse Internet Mail Extentionの略。元の名前からわかるように、元々は電子メールに乗せるデータの形式を表すためのもの。