Installerフォルダーの肥大化#4 他のアプリとの比較

前回の投稿までに、Installer Adjustment AppでInstallerフォルダー内の未使用ファイルの確認ができるようになりました。今回は、PatchCleanerと比較をしてみたいと思います。

アプリの開発のきっかけ

Installer Adjustment Appを作成するきっかけになったのは、モバイルPCがストレージ不足になったことです。これをきっかけとして、ストレージをチェックしていたところ、C:\Windows\Installerフォルダーのサイズが巨大になっていることがわかりました。

調査したところ、このフォルダーはWindows Installer技術を使って作成されたインストーラーで使われていることがわかりました。

このフォルダーに不要なファイルがないかが気になり、それチェックするアプリとして、Installer Adjustment Appの開発を開始しました。

このアプリがインストーラーの一覧の列挙と使用中のファイルを解析するところまでできたので、きっかけとなったモバイルPCでの実行結果を確認します。

また、このアプリの最終的な目的と同等な機能を持つPatchCleanerというアプリがあることがわかりました。そのため、そのアプリでの実行結果と比較検討してみたいと思います。

目的のモバイルPCでの実行結果

Installer Adjustment Appでの結果

モバイルPCで解析を実行したところ、以下の結果になりました。この時、アプリは管理者権限で起動しました。

Installer Adjustment App 0.2.0 – モバイルPCでの実行結果

フォルダーのサイズは66.1GB、ファイル数は14,819でした(左側のフォルダーツリー)。

この中で、未使用のサイズは54.5MB、ファイル数は170でした(中央のフォルダーツリー)。もっと多くの未使用のファイルがあると予想していたのですが、意外と少なかったです。

また、インストーラー本体ファイル(msiファイル)とインストーラー更新ファイル(mspファイル)に限った使用中のファイルサイズは60.7GB、ファイル数は2634個でした (右側のフォルダーツリー)。

未使用ファイルを消したとしても、54.5MBしか空き容量が増えないことがわかりました。

PatchCleanerでの結果

PatchCleanerは、アプリを起動したらすぐに解析が始まります。ただし、解析対象は、C:\Windows\Installer\フォルダー配下のインストーラー本体ファイル(msiファイル)およびインストーラー更新ファイル(mspファイル)のみのようです。

解析結果の概要は以下のようになりました。

PatchCleaner 4.2.0 – モバイルPCでの実行結果(要約)

使用中のファイルサイズは27.18GB、ファイル数は2210個です。孤立したファイルサイズは49.65GB、ファイル数は698個です。ただし、孤立ファイルの中の45個のファイル(1.25GB)は、孤立ファイルだけれども、安全のために孤立ファイルとして扱わないファイルということです。

二つのアプリの解析の結果の比較

二つの結果を比較します。比較しやすいように表にまとめると以下のようになります。

Installer Adjustment App 0.2.0PatchCleaner 1.4.2
Installerフォルダー内すべてのファイル 66.1GB、14,819個
使用中のファイル(msi/mspのみ) 60.7GB、2634個27.18GB、2210個
未使用ファイル/孤立ファイル 54.5MB、170個49.65GB、698個
削除可能ファイル 54.5MB、170個48.40GB、653個

二つのアプリの結果を比較すると、使用中としているファイルサイズ・ファイル数、および、削除可能と判断しているファイルサイズ・ファイル数に大きな違いがあります。この違いはどこからきているのでしょうか?

PatchCleanerのメイン画面では概要情報だけですが、画面上の「details…」リンクをクリックすると「製品(インストーラー)の詳細リスト」、および、「孤立ファイルの詳細リスト」が確認できます。これらの情報からPatchCleanerの問題点を確認したいと思います。

製品(インストーラー)の詳細リスト

PatchCleanerのメイン画面の一つ目の「details…」リンクをクリックすると以下のような「製品(インストーラー)の詳細リスト」画面が表示されます。

PatchCleaner 4.2.0 – モバイルPCでの実行結果(製品一覧)

この画面から分かることが一つあります。製品名が文字化けしています。PatchCleanerは、多言語化対応ができていないようです。英語圏のみを想定した実装になっているようです。そのため、英語圏の文字以外が含まれていた場合の動作は未定義(動作するかもしれないが、全く検証されてない状態)と思われます。

孤立ファイルの詳細リスト

PatchCleanerのメイン画面の二つ目の「details…」リンクをクリックすると以下のような「孤立ファイルの詳細リスト」画面が表示されます。

この例では、二つのインストーラー本体ファイル(9d3f3631.msiと17ca6be3.msi)の詳細画面の例です。

PatchCleaner 4.2.0 – モバイルPCでの実行結果(孤立ファイル1)
PatchCleaner 4.2.0 – モバイルPCでの実行結果(孤立ファイル2)

一つ目の孤立ファイル(9d3f3631.msi)は、Subjectの項目を見てわかるように「Microsoft Azure Libraries for .NET – v2.4」のインストーラー本体ファイルです。このファイルを無用な孤立ファイルとして判断しています。

二つ目の孤立ファイル(17ca6be3.msi) は、Subjectの項目を見てわかるように「Microsoft Azure Libraries for .NET – v2.9」のインストーラー本体ファイルです。このファイルを無用な孤立ファイルとして判断しています。

これらの二つのファイルは、本当に不要なファイルなのでしょうか?

本当にWindowsが不要としているファイルかを確認するために、コントロールパネルの「プログラムのアンインストールまたは変更」にこれらのインストーラーが含まれていないかを確認します。

もし、コントロールパネルの「プログラムのアンインストールまたは変更」も含まれている場合は、本当は必要なファイルとなります。必要なファイルを削除してしまうと、対応するアプリなどの「アンインストールまたは変更」ができなくなってしまいます。

実際のコントロールパネルの「アンインストールまたは変更」の画面が以下の通りです。

モバイルPCのコントロールパネルの「プログラムのアンインストールまたは変更」

この中には、「Microsoft Azure Libraries for .NET – v2.4」も「Microsoft Azure Libraries for .NET – v2.9」も、両方とも一覧に存在します。このため、これらのインストーラー本体ファイル(9d3f3631.msiと17ca6be3.msi )は、本当は必要なファイルであることがわかります。

PatchCleanerの誤判定

これらの結果を見る限り、PatchCleanerの解析結果を信用して、ファイルを削除してしまうと、アプリの「アンインストールまたは変更」ができなくなり、システムが壊れていしまうことになります。

PatchCleanerの誤判定の原因としては、

  • 多言語対応できていないアプリを日本語環境で使用したこと
  • そもそものPatchCleanerの判定アルゴリズムに問題があること

などが考えられます。前者の場合は、英語圏専用アプリを無視して日本語環境で使ったユーザーの問題です。しかし、後者の原因ならPatchCleanerの主機能のバグとなります。

どちらにしろ、PatchCleanerの解析結果を信用して、ファイルを削除するのは避けた方がよさそうです。必要なファイルを消してしまったら、システムを破壊したに等しいです。PatchCleanerを使いたい場合は、絶対に「Delete」ボタンは使わず、「Move」ボタンを使うようにしましょう。そして、Moveしたものはいつでも戻せるように別のストレージ残しておきましょう。

Installer Adjustment Appの判定アルゴリズム

Installer Adjustment Appの解析結果では、コントロールパネルの「アンインストールまたは変更」の一覧に表示されているものが、未使用ファイルの候補として列挙はされていません。そのため、PatchCleanerよりは、安全性が高いと思います。

しかしながら、Installer Adjustment Appは安全ではあるものの、削除できるファイルがあまりにも少なく、ストレージの空き容量を増やすという目的が達成できません。

今後は、判定アルゴリズムに改良を加えて、システムを破壊しない程度に削除可能なファイルを増やすことを考えてみたいと思います。インストーラー更新ファイルの方の判定アルゴリズムに工夫の余地がありそうです。


今回の投稿では、既存のPatchCleanerというアプリの解析結果とInstaller Adjustment Appの解析結果を比較してみました。

結果から、PatchCleanerでは、コントロールパネルの「アンインストールまたは変更」の一覧に表示されているような、明らかに使用中であるファイルまで、削除対象としていることに驚きました。PatchCleanerの利用することは、システムを破壊する危険がおおいにあると思った方がよさそうです。

Installer Adjustment Appでは、明らかに使用中なファイルを削除対象としないように改良していきたいと思います。

One Reply to “Installerフォルダーの肥大化#4 他のアプリとの比較”

コメントを残す