トップ回答者
Windows上のファイルタイプの関連付けをWSHまたはPowerShellから行いたいです。

質問
-
通常、Windows上のファイルタイプの関連付けを行う際には、コントロールパネルの "既定のプログラム" で、"既定のプログラムを設定する" からアプリごとに設定するか、"関連付けを設定する" で拡張子やプロトコルごとに設定する必要がありますが、いずれもGUIによる手動作業を必要とします。当然、アプリやファイルタイプが多数あると手間がかかってしまいます。
そこで、この作業をスクリプトで自動化したいと思っていますが、関連付けを管理しているユーザーのレジストリの
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
- HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations
- HKEY_CURRENT_USER\Software\Microsoft\Windows\Roaming\OpenWith
には、セキュリティのために整合性をチェックするための「ハッシュ値」が書き込まれており、その計算方法は非公開であるため直接ここを編集することはできません。
そのため、WSHやPowerShellのレジストリ書き込み機能だけで関連付け作業を自動化できず困っており、コントロールパネル等からのGUI操作と同等の方法を探しています。
なお、コマンドプロンプトの "ASSOC" コマンドは、全ユーザーのレジストリの
- HKEY_CLASSES_ROOT\.<拡張子>
を書き込むためのものであり、この設定よりも上記ユーザーごとの設定が優先されてしまうため使えません。
- 編集済み fzok4234 2017年8月29日 3:17 ASSOCコマンドに関する補足
回答
すべての返信
-
回答ありがとうございます。
やはりスクリプトによる自動化は無理なのですね。実は今まで、拡張子の場合は
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.<拡張子>
- HKEY_CURRENT_USER\Software\Microsoft\Windows\Roaming\OpenWith\FileExts\.<拡張子>
を、プロトコルの場合は
- HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\<プロトコル>
- HKEY_CURRENT_USER\Software\Microsoft\Windows\Roaming\OpenWith\UrlAssociations\<プロトコル>
を削除した上で、それぞれの動作定義を
- HKEY_CLASSES_ROOT\<ProgID>\Shell\<Verb>\Command
- HKEY_CLASSES_ROOT\.<拡張子>
を編集するという作業をスクリプトで自動化していました。
しかし、いわゆる "Windows XP方式" といわれるこの方法は現在のWindows 7、8.1、10では推奨されていないために、新しい方式での関連付けのスクリプトでの自動化の方法を模索していた次第であります。