短期集中連載

10年を超える定番クリーナー「CCleaner」を10倍使いこなす 第8回

孤立したレジストリエントリをクリーニング その3

「CCleaner」

 本連載では、定番クリーニングソフト「CCleaner」の機能を紐解き、各項目が実行しているクリーニングの対象を詳細に解説していく。今回も、引き続き“レジストリ”セクションの項目を個別に解説する。

ヘルプファイル

 かつてWindowsのヘルプシステムでは、拡張子“.hlp”を持つヘルプファイル本体や、拡張子“.cnt”を持つ索引情報ファイルなどを組み合わせて使っていた。ちなみに正式名称は“Microsoft WinHelp”である。その後、Webページを構成するHTMLファイルや画像ファイルなどをひとつのファイルにまとめた、拡張子“.chm”を持つ“Microsoft Compiled HTML Help”に移行したが、2001年頃には拡張子“.hxs”を持った“Microsoft Compiled HTML Help 2.x”もリリースされた。しかし、開発環境が必要なため、あまり広まらなかったように記憶している。

 さらにWindows Vista時代からはXMLベースの“Microsoft Assistance Markup Language”に移行。俗に“AP Help”と呼ばれるヘルプ形式に移行するため、ヘルプのビューワーである「winhlp32.exe」は既定で提供されなくなった。Windows 8.1の場合、サポート情報ページの“Windows ベースのプログラムでヘルプを開いたときのエラー: "機能が含まれない" または "ヘルプがサポートされていない"”(KB917607)で公開済みの更新プログラムを適用することで表示可能だ。

「winhlp32.exe」を単独起動、もしくは拡張子「.hlp」を持つファイルを開くと、サポートしていない旨を示すメッセージが現れる
更新プログラムを適用した状態。WinHelp形式の表示が可能になる
“Help”キーの内容。ヘルプファイルの名前を値名、パスをデータとして格納している

 前振りが長くなってしまったが、「CCleaner」は“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Help”キーおよび“HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\Help”キーに登録したWinHelpファイルが、指定したフォルダに存在するかスキャンを行っている。他の項目と同じく、ヘルプファイルが存在しない場合に孤立したエントリとして削除対象になる仕組みだ。クリーニング時に現れた場合は、削除対象に含めるとよい。

インストーラ

“インストーラ”によるスキャン結果。ちょうど「Microsoft Silverlight」の古いエントリが多数列挙された

 アプリケーションなどをインストールする場合、「Windows Installer」に代表されるインストーラーを使用するが、その「Windows Installer」が使用するレジストリキーが、“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer”キーである。通常は本キー以下の“Folders”キーにインストール情報を格納しているが、他の項目と同じく孤立したエントリを見つけ出すのが「CCleaner」の役割だ。

 本項目を使う場合、よく目にするのが「Microsoft Silverlight」である。ちょうど本稿を執筆している間にバージョン5.1.20913から5.1.30214へ更新したようだが、旧バージョンの言語ファイルに関するエントリが多数列挙されていた。前述のキー情報と参照先となるフォルダをスキャンするため時間がかかるものの、この他にもアンインストーラーが取りこぼしたエントリなども検出するので、定期的なクリーニングをお勧めする。

未使用のソフトウェア

 アンインストーラーがエントリを削除しても、親となるキーが残ってしまうケースは珍しくない。“未使用のソフトウェア”はサブキーやエントリが存在しない“HKEY_CURRENT_USER\Software”および“HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node”キーをスキャンし、クリーニング対象として列挙している。ただし、明らかに不要なキーだとしてもサブキーやエントリを含んでいる場合は対象外だ。

 さらに「セキュリティが強化されたWindowsファイアウオール」で作成した規則も対象となる。具体的には、“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules”キーをスキャンし、データで指定した実行形式ファイルが存在しない場合、クリーニング対象に加える仕組みだ。いずれも不要な情報なので、削除対象に加えることをお勧めする。

スタートアップアプリケーション

 Windowsはサインイン時に指定したプログラムを自動実行する機能を備えているが、その中でもレジストリ内で管理しているエントリに対して、孤立していないかスキャンするのが“スタートアップアプリケーション”の機能だ。そのため、“%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup”および“%ProgramData%\Microsoft\Windows\Start Menu\Programs\StartUp”フォルダのショートカットファイルは対象外となる。

 スキャン対象となるのは下記に列挙したキーだが、各エントリのデータをもとに実行形式ファイルがあるか確認し、孤立したエントリをクリーニング対象に加える仕組みだ。問題点が列挙された場合は詳細を確認し、アプリケーションを再インストールするか、エントリを削除するか判断しよう。

  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
  • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
  • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce

スタートメニューの表示順序

 こちらの原文は“Start Menu Ordering”のため、項目名としては間違っていないものの、公式サイトの説明には“存在しないスタートメニューのアプリケーションエントリを削除する”と書かれている。改めて動作を確認しようと思ったが、ご承知の通りWindows 8.1にプログラムメニューは存在しない。そこでWindows 7上で「CCleaner」からスキャンを実行しても、“問題点”が列挙されないのである。

「Process Monitor」による検証では、“~MenuOrder\Start Menu2\Programs”キーへのアクセスを確認。推測だがバイナリ値“Order”の削除を目的としているのだろう

 次に「Process Monitor」で検証したところ、“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start Menu2\Programs”キーへのアクセスを確認した。確かにWindows XP時代は、“Programs”キーに対するサブキーとして多くのプログラムメニュー情報が格納されていたが、Windows 7/8.1ではエントリすら存在しない。念のため「CCleaner」のデバッグモード(CCleaner.exeに“/debug”オプションを付けて実行する)も試したが、とくに得られるものはなかった。

 これ以上の検証はリバースエンジニアリングしないと難しいので控えるが、少なくともWindows 8.1で本項目をクリーニング対象に含める必要はないだろう。

MUIキャッシュ

 この“MUIキャッシュ”で対象となるのは、ユーザーが使用したファイルの履歴情報だ。具体的には新しいアプリケーションを使用する際に、OSが実行形式ファイルのバージョンリソースからアプリケーション名などを抽出し、エントリとして格納する仕組みを“MUIキャッシュ”と称する。

“~Windows\Shell\MuiCache”キーの内容

 「CCleaner」がスキャン対象としているのは、“HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache”および“HKEY_CURRENT_USER\\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache”キー。具体的にはWindows XPまでは前者のキーを参照し、Windows Vista以降は後者のキーを参照する仕組みだ。そして、ここにパスと実行ファイル名を持つ文字列値を作成し、データへアプリケーション名が格納される。

 「CCleaner」は、このエントリをもとにファイルが存在するか確認し、存在しない場合に“問題点”として列挙する仕組みだ。端的に述べれば“既に存在しないファイルのエントリ”となるため、削除対象に加えても何ら問題はない。

サウンドイベント

「サウンド」で指定する各種サウンドイベント。指定したサウンドファイルが存在しない場合に“孤立したエントリ”としてクリーニング対象となる

 メッセージダイアログ起動時やエラー発生時に再生するサウンドは、“HKEY_CURRENT_USER\AppEvents”キーで管理されている。キーの構成を語るとそれだけで1回分の連載が飛んでしまうため割愛するが、「CCleaner」は“HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\.Default\.Current”キーなどの“(既定)”値で指定したサウンドファイルが存在するかスキャンし、その結果存在しないファイルを“問題点”として列挙する仕組みだ。

 あまりカスタマイズの分野でも人気がないサウンドイベントだけに、トラブルが発生することは希だろう。だが、データ(エントリ)の整合性を取るという意味では、クリーニング対象に加えておくことをお勧めする。

Windowsサービス

“~CurrentControlSet\Services”キー以下では、各種Windowsサービスを実行するための実行形式ファイルを指定している

 Windowsの各種機能を支える“Windowsサービス”は、高いユーザー権限で実行形式ファイルを動かしているのが大半だ。こちらの情報は“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services”キーに連なるサブキーで管理され、スタートアップの種類や実行パラメーターの指定などが行われている。

 「CCleaner」は、サービスごとに存在するサブキーのDWORD値“Type”(サービスの種類)と展開可能な文字列値“ImagePath”を参照し、前者は数値が正しいか確認。後者は指定した実行形式ファイルが存在するか確認し、存在しない場合は“問題点”として列挙する。

 Windowsサービスが孤立するケースはさほど多くないが、「iTunes for Windows」のように多くのWindowsサービスを組み込むタイプのアプリケーションは注意が必要だ。特定のWindowsサービスが稼働しないことで、「iTunes」やOSが正常に動作しない経験をお持ちの方もおられるだろう。こちらはアンインストール&再インストールすれば解決するトラブルだが、何らかの理由でWindowsサービスに起因するトラブルが発生した場合は、「CCleaner」でクリーニングするのも手だ。

最後に

 以上で、「CCleaner」が実行しているクリーニング項目の解説は終了となる。Windows XP過渡期から現在まで長く愛されてきた「CCleaner」は、現行OSであるWindows 8.1では不要な項目も存在するが、今なお有益なツールであることは明らかだ。しかし、以前から気になっていたのが、実際にファイルやエントリを削除するにもかかわらず、その内容がソフト上で詳しく解説されていない点である。今回は必要最小限の解説にとどめたが、本稿がこれから「CCleaner」を使おうとするユーザーの一助になれば幸いだ。

(Cactus:阿久津 良和)