前回紹介したWindows Vistaでは、セキュリティを高めるために、関連付けは、インストール時に管理者権限でアプリ自身を登録し、アプリがユーザー権限で関連付け情報をAPI経由で登録とかなり面倒なものになった。
Windows 8方式での関連付けは登録が簡略化されている
その反省か、Windows 8方式の関連付けでは、登録方法が簡略化されている。ただし、互換性の維持という点から、Windows 8でもVista方式の利用は可能。また、エクスプローラーからデータファイルに対しての関連付けを「プログラムから開く」で変更した場合、ユーザーが実行ファイルを直接指定すると、XP/Vista方式での設定も同時に行われる。
Windows 8でも、既定のアプリとして登録するプログラムは「ProgID」に登録し、HKEY_CLASSES_ROOTで、拡張子とProgIDを直接関連づけるか、拡張子とファイルタイプを関連付けしたあと、ファイルタイプとアプリを関連づけるといった基本的な方法は同じ。ただし、Windows 8では、ストアアプリを割り当て可能になっている。ストアアプリは、デスクトップ環境の実行ファイルとは実行のメカニズムが違う。
Windows 8以降で、エクスプローラーを使い、データファイルに対して、関連付けを変更すると、Windows 8方式で、拡張子と既定のプログラムの関連付けを記録する。ユーザーが変更をしなければ、アプリが登録した関連付け方式が使われる。
Windows 8では、新たに関連付けをレジストリにある
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Roaming\OpenWith\FileExts\[拡張子]
で行なう(以下このキーをローミング拡張子キーと呼ぶ)。Windows 8以降での優先順位を順位は、下の図のようになり、より優先順位の高いキーが設定されているなら、低い優先順位のキーがあっても無視される。このローミング拡張子キーが最も優先度が高い。
また、Windows 8では、関連付けは、原則、ユーザーごとに管理されるものとなった。HKCR(HKEY_CLASSES_ROOT)は、実際には、
HKEY_CURRENT_USER\SOFTWARE\Classes
HKEY_LOCAL_MACHINE\SOFTWARE\Classes
の2つのキーを合成したもので、HKCU(HKEY_CURRENT_USER)のほうが優先される。また、書き込みもHKCU側に行われる。関連付け関係のAPIなども原則HKCU側を設定する。このため、通常は、HKCRのみを扱えばよい。
Windows 8のローミング拡張子キーには、UserChoiceキーがあり、ここに「Hash」と「ProgId」の2つのアイテムがある。ProgIdが拡張子に対するデフォルトのプログラムを指定するアイテムで、ここにProgIDまたは、ファイルタイプのキー名(HKCRは省略される)が記録されている。
Hashは、セキュリティ用の情報で、書き込んだProgId値が正しいものかどうかを確認するための値で、WindowsがProgIdアイテムを書き換えたときに設定する。Hash値の計算方法は公開されていない(解析したという話はあるようだが)。しかし、API経由で関連付けを行えば、Windowsが正しく設定してくれる。
つまり、Windows 8では、実際にはVistaからだが、関連付けは、アプリケーションがレジストリを操作して行なうことは想定しておらず、API経由で設定することになっている。ただし、デスクトップ環境では、Windows 8以前を前提に開発されたアプリケーションがあるため、互換性を維持するため、レジストリの操作による関連付けを行なっても動作する。
しかし、ユーザーが、エクスプローラーから関連付けを変更すると、Windows 8のローミング拡張子キーが有効になり、以後は、以前の方式に従ってレジストリを変更しても有効にはならない。
ハッシュ値を簡単に計算する方法がないため、ユーザーが関連付けを変更する場合に、レジストリを操作する場合、このキーを書き換えても無効になる。しかし、ローミング拡張子キー以下を削除することで、該当の拡張子の設定は、他のキーで指定できるようになる。

この連載の記事
-
第477回
PC
Windowsで2つの文字列を同時に含むテキストファイルを探す方法を考える -
第476回
PC
さらばSkype! Windows&MSのコミュニケーションアプリの30年 -
第475回
PC
Windowsのコマンドラインの補完機能について解説 -
第474回
PC
Windowsでのコマンドラインのヒストリ機能 -
第473回
PC
Windowsは内部的にどうやってインターネットへの接続状態を確認している? -
第472回
PC
WindowsのエラーをMicrosoftに送信するテレメトリ機能を理解する -
第471回
PC
Windowsのコマンドラインでエイリアスを使う -
第470回
PC
Windows用のパッケージマネージャー「Winget」 プレビュー版で機能が充実してきた -
第469回
PC
Windows Updateの27年 悪役だった頃から改良が進んで、徐々に目立たない存在に -
第468回
PC
2025年のWindowsどうなる!? Windows Insider Programの状況をあらためて見る -
第467回
PC
Copilot+ PCのNPUでカメラを処理する「Windows Studio Effects」 その内容や効果は? - この連載の一覧へ