こんにちは、阿久津です。Windows 7には、以前のWindows OS向けに作られた実行ファイルを正常に動作させるため、プログラムの互換性を維持する機能が用意されています。Windows XPなどでも実行ファイルのプロパティダイアログに<互換性>タブが用意されていましたが、ユーザーが能動的に操作しなくてはなりませんでした。そこで、Windows 7から搭載されたプログラムの互換性アシスタント(PCA)の登場です。

PCAはプログラムが正しく展開されない場合、自動的にWindows XP互換モードでセットアップを実行する「推奨の設定を使用して再インストールする」、正しくセットアップされた情報をシステム内に保持する「このプログラムは正しくインストールされました」といった操作をうながされます。なお、「キャンセル」を選択した場合、PCAは何ら処理を行いません。

その一方でサブプログラムを呼び出す際に管理者権限を求めるプログラムにもPCAは反応します。初回時はプロセス作成を失敗として検出し、自動的に修正処理が行われますが、次回以降は自動的にUAC(ユーザーアカウント制御)の確認ダイアログが現れるという仕組みに切り替わるため、ユーザーはPCAの存在を意識する必要はありません。

また、あらかじめWindows 7で正常に動作しないことが判明しているソフトウェアに対しては、事前に保持しているデータベースを元に警告をうながす仕組みも加わっています。<オンラインで解決策の有無を確認する>ボタンをクリックしますと、マイクロソフトにエラー報告が送信され、バージョンアップをうながすといったメッセージが表示されますが、筆者が確認した限りではあまり有益な情報に出会ったことはありません。

このようにWindows 7のPCAの各機能は、サービスとして稼働する「Program Compatibility Assistant Service(PcaSvc)」によって実現され、各所で動作しています。その一方で気になるのが、実行ファイルのコンテキストメニューに並ぶ<互換性のトラブルシューティング>という項目。Windows OSの操作に慣れた方なら、必要に応じてウィザードを起動すれば済む話であり、同項目を参照する機会は多くありません。そこで今回はこの項目を削除するチューニングをお届けします。

1.[Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力してから<OK>ボタンをクリックします。
2.レジストリエディターが起動したら、HKEY_CLASSES_ROOT \ batfile \ ShellEx \ ContextMenuHandlers \ Compatibilityまでキーをたどって開きます。
3.Compatibilityキーを右クリックし、メニューから<削除>を選択します。
4.確認をうながすダイアログが表示されたら<はい>ボタンをクリックします。
5.HKEY_CLASSES_ROOT \ cmdfile \ ShellEx \ ContextMenuHandlers \ Compatibilityキーに移動し、ステップ03~04の操作を行います。
6.HKEY_CLASSES_ROOT \ exefile \ shellex \ ContextMenuHandlers \ Compatibilityキーに移動し、ステップ03~04の操作を行います。
7.HKEY_CLASSES_ROOT \ lnkfile \ shellex \ ContextMenuHandlers \ Compatibilityキーに移動し、ステップ03~04の操作を行います。
8.HKEY_CLASSES_ROOT \ exefile \ ShellEx \ ContextMenuHandlers \ Compatibilityキーに移動し、ステップ03~04の操作を行います。
9.変更内容をシステムに反映させるため、[F5]キーを押してからレジストリエディターを終了させます。

これでチューニングが終了しました(図01~17)。

図01: [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力して<OK>ボタンをクリックします

図02: レジストリエディターが起動したら、HKEY_CLASSES_ROOT \ batfile \ ShellEx \ ContextMenuHandlers \ Compatibilityまでキーをたどって開きます

図03: Compatibilityキーを右クリックし、メニューにある<削除>をクリックします

図04: 確認をうながすダイアログが起動したら、<はい>ボタンをクリックします

図05: 続いて、HKEY_CLASSES_ROOT \ cmdfile \ ShellEx \ ContextMenuHandlers \ Compatibilityキーを開きます

図06: Compatibilityキーを右クリックし、メニューにある<削除>をクリックします

図07: 確認をうながすダイアログが起動したら、<はい>ボタンをクリックします

図08 続いて、HKEY_CLASSES_ROOT \ exefile \ ShellEx \ ContextMenuHandlers \ Compatibilityキーを開きます

図09: Compatibilityキーを右クリックし、メニューにある<削除>をクリックします

図10: 確認をうながすダイアログが起動したら、<はい>ボタンをクリックします

図11: 続いて、HKEY_CLASSES_ROOT \ lnkfile \ ShellEx \ ContextMenuHandlers \ Compatibilityキーを開きます

図12: Compatibilityキーを右クリックし、メニューにある<削除>をクリックします

図13: 確認をうながすダイアログが起動したら、<はい>ボタンをクリックします

図14: 最後に、HKEY_CLASSES_ROOT \ Msi.Package \ shellex \ ContextMenuHandlers \ Compatibilityキーを開きます

図15: Compatibilityキーを右クリックし、メニューにある<削除>をクリックします

図16: 確認をうながすダイアログが起動したら、<はい>ボタンをクリックします

図17: 操作を終えたら[F5]キーを押して変更内容をシステムに反映させてから、<×>ボタンをクリックしてレジストリエディターを終了させます

早速、結果を確認してみましょう。適当な実行ファイルを用意して右クリックしてください。すると、それまであった<互換性のトラブルシューティング>という項目がなくなりました(図18~19)。

図18: チューニング前の状態。実行ファイルのコンテキストメニューには<互換性のトラブルシューティング>があります

図19: チューニング後の状態。コンテキストメニューから<互換性のトラブルシューティング>が取り除かれました

今回のチューニングは各実行ファイル(拡張子「.bat」「.cmd」「.exe」「.lnk」「.msi」)が参照するキーから、<互換性のトラブルシューティング>という項目を表示するためのクラスID「1d27f844-3a1f-4410-85ac-14651078412d」を削除するというものです。

従来のチューニングと異なり、キーおよびエントリーを削除するため、あらかじめバックアップを取ってから実行してください。また今回は、バックアップが面倒な方向けに、上記のチューニングを行う「"互換性のトラブルシューティング"の削除.reg」と、元の状態に戻す「"互換性のトラブルシューティング"の復元.reg」と、二つのレジストリファイルを用意しました。Windows 7のチューニングに役立てば幸いです。

それでは、また次号でお会いしましょう。

阿久津良和(Cactus)