Installerフォルダーの肥大化#12 アプリに製品の更新の削除の機能を追加

前回の投稿で、Installer Adjustment Appで簡単調整の3つ目の機能を追加しました。今回は、高度な調整機能として製品のインストーラーファイルを削除する機能を追加しました。

Installer Adjustment App 1.0.0

アプリアイコン(Installer Adjustment App 1.0.0)

Installer Adjustment Appのバージョン1.0.0をリリースしました。Installer Adjustment Appのバージョン1.0.0は、リリースページからダウンロードできます。

Installer Adjustment Appの前バージョン0.9.0で、リリースページに記載があるように、簡単調整機能の三つ目の調整機能機能を有効化できました。今回は高度な調整機能として、製品インストーラーファイルの削除機能を追加しました。

このバージョンでは、以下の機能を実装しました。

  • 製品インストーラーファイルの削除機能を追加(高度な調整機能)
  • 製品の詳細で関連ファイルのサイズの情報を追加
  • アイコン表示の高DPI対応
  • 開発のサポートボタンを追加

各機能の詳細は、リリースページの説明を参照してください。この投稿では、追加した「製品インストーラーファイルの削除機能を追加(高度な調整機能)」について記載します。

製品のインストーラーファイル

アプリケーションソフトウェアが利用するフォルダー

アプリケーションソフトウェア製品のインストーラーでは、製品をインストールすると、アプリケーションを実行するために必要なプログラムやデータがストレージ(HDD/SSDなど)上に配置されます。Windowsアプリケーションの作成ガイドラインに準拠した一般的なソフトウェアでは以下のフォルダーが利用されます。

  • ソフトウェアの全ユーザー共通の実行ファイル
    プログラムフォルダー(C:\Program Files\xxxx\)
  • ソフトウェアの全ユーザー共通のデータファイル
    プログラムデータフォルダー(C:\Program Data\xxxx\)

なお、全ユーザー共通ではなく、ユーザー個別のデータファイルは、ユーザーデータフォルダー(C:\Users\[ユーザ名]\AppData\)が利用されます。このユーザー個別のデータファイルをインストーラーで配置することはほとんどありません。アプリケーションソフトウェア製品の実行時に実行プログラムから利用されることが主な用途です。

Windows Installer技術を利用したインストーラーが利用するフォルダー

Windows Installer技術を利用したインストーラーでは、製品をインストールすると上記に加えてインストーラーを構成するためのファイルが、追加で配置されます。具体的には、

  • システムフォルダー配下のInstallerフォルダー(C:\Windows\Installer\)

に、インストーラーを構成するファイルが配置されます。

このフォルダーは「保護されたオペレーティング システム ファイル」の扱いのため、既定では隠しフォルダーとなっています。エクスプローラーでフォルダーを確認するときは、エクスプローラーのオプション設定の表示設定で、「保護されたオペレーティング システム ファイルを表示しない(推奨)」のチェックを外す必要があります。

Installer Adjustment Appでこのフォルダーを開きたい場合は、メイン画面の「解析の詳細を表示する」ボタンをクリックし、解析詳細画面の「Installerフォルダーを開く」ボタンをクリックすると表示できます。また、解析詳細画面の「すべてのファイルとフォルダー」のツリーにもフォルダーの内容が表示されています。

メイン画面の「解析の詳細を表示する」ボタン
解析詳細画面の「Installerフォルダーを開く」ボタンとフォルダーツリー表示

Installerフォルダーの構成

このInstallerフォルダー(C:\Windows\Installer\)には、製品のインストーラーを構成する以下のファイルなどが配置されます。

  • 製品のインストーラーのmsiファイル (C:\Windows\Installer\xxxxxx.msi)
  • 製品の更新インストーラーのmspファイル (C:\Windows\Installer\xxxxxx.msp)
  • インストールするファイルのキャッシュファイル (C:\Windows\Installer\$PatchCache$\フォルダーの配下)
  • 製品のハッシュファイル (C:\Windows\Installer\SourceHash{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})
  • 製品ごとの独自の付属ファイル (C:\Windows\Installer\{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\フォルダーの配下)
    独自の付属ファイルとは、設定アプリの「アプリと機能」やコントロールパネルの「プログラムのアンインストールまたは変更」に表示される製品のインストーラーのアイコンなど
  • インストーラー作成ツールに独自の付属ファイル(C:\Windows\Installer\フォルダーの配下)
    たとえば、WiX toolset (Windows Installer XML toolset)を使って作成したインストーラーの場合、C:\Windows\Installer\wix{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.SchedServiceConfig.rmiなどのファイルが作成されることがあります。

このように、Insatllerフォルダーには様々なファイルやフォルダーが配置されます。ただし、これらのファイルは、製品のインストーラーを使って、製品をアンインストールしたり、再構成したりするときに使用されるファイルです。

そのため、特殊な事例を除きアプリケーションソフトウェア製品の通常利用時には利用されません。

製品のインストーラーファイルを削除する機能

そこで、これらのファイルを一時的に削除する機能が考えられます。今回は、この機能を高度な調整機能として、製品のインストーラーファイルの削除する機能として追加しました。

この機能では、指定した製品のインストーラーに関連するファイルをシステムから削除します。ただし、後で戻すことができるようにバックアップは必ず作成します。

この「製品のインストーラーファイルの削除する」機能は、製品の一覧画面に実行ボタンがあります。

メイン画面の「解析の詳細を表示する」ボタンをクリックし、「製品の一覧を表示する」ボタンをクリックすると、製品の一覧画面を表示できます。

メイン画面の「解析の詳細を表示する」ボタン
解析詳細画面の「製品の一覧を表示する」ボタン

製品一覧の画面では、右下に「選択した製品のインストーラファイルを削除する」ボタンがあります。インストーラーファイルを削除したい製品を選択し(先頭のチェックボックスをチェックし)、ボタンをクリックすると、削除の確認画面が表示されます。

製品一覧画面の「選択した製品のインストーラーファイルを削除する」ボタン

削除の確認画面

Installerフォルダー(C:\Windows\Installer\)は、管理者権限がないと書き換えができません。そのため、アプリを管理者権限で起動していない場合は、削除を実行できません。

削除の確認画面の「このアプリを管理者権限で再起動する」ボタン

管理者権限で起動していない場合は、上記のように「このアプリを管理者権限で再起動する」ボタンがあるので、管理者権限で起動し直します。

管理者権限で起動している場合は、下記のように削除を実行できます。

製品のインストーラーファイルの削除の確認画面

ただし、この「製品のインストーラーファイルの削除する」の機能では、バックアップを作成することが必要です。製品のアンインストールや構成変更をするときに、ファイルを元に戻す必要があるからです。

バックアップフォルダーを設定すると、削除を実行できます。

バックアップを元に戻す方法

バックアップフォルダーには、以下の二つのフォルダーが作成されます。

  • Installerフォルダー
  • InstallerAdjustmentAppフォルダー

前者のフォルダーには、C:\Windows\Installer\フォルダーから削除した製品インストーラーファイルが同じフォルダー構成でバックアップされます。もし、バックアップを使って復元したい場合は、このInstallerフォルダーをそのまま、C:\Windows\フォルダーにコピーすれば復元できます。

後者のフォルダーには、削除した製品インストーラーファイルの情報(ファイルパス、ファイルサイズ、変更日時など)が製品インストーラー毎にXMLファイルで保存されます。ファイル名はProduct_{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.xmlの形式となります。{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}は製品インストーラーのプロダクトIDとなります。このファイルから、どのようなインストーラーファイルおよび関連ファイルが削除されたのかを確認できます。


今回のバージョン1.0.0で、高度な調整機能についても、予定していた機能がすべてそろいました。

今後は、バグ報告があればその修正、および、機能の改善をしていく予定です。ただし、当初の目的の機能は実現済みのため、リリースの頻度は下がります。

コメントを残す