自己展開形式EXEファイル作成アプリ3(ファイル更新パッチのパッケージを作成)

File Package App (ファイルパッケージアプリ)の紹介です。前回の投稿では、このアプリの拡張機能の概要を紹介しました。今回は拡張機能を使ったファイル更新パッチのパッケージ作成方法を紹介したいと思います。

アプリのファイルの更新方法

アプリのインストーラーを公開し、その後にバグや脆弱性が見つかるとアプリの更新も公開する必要があります。アプリを更新するには以下の方法が考えられます。

  • インストーラー全体を再作成して、アプリを更新する
  • ファイル更新パッチを作成して、特定のファイルのみを更新する

前者の場合は、たった一つのファイルの更新だけでも、インストーラー全体を公開する必要があります。場合によっては、1MB以下のファイルの更新をしたいだけであっても、数十MBのインストーラーを用意する必要があるかもしれません。

後者の場合は、本当に必要なファイルのみを含む更新パッチを作成することになるので、最小サイズの更新パッケージとなります。

ファイル更新パッチ

では、後者のファイル更新パッチはどのように作成することができるのでしょうか?

  • InstallShield, WiX toolsetなどインストーラー作成ツールを使用して、特定のファイルのみを更新するインストーラーを作成する
  • 自己展開形式EXEファイル作成ツールで更新するファイルのみをパッケージする

前者の方法で更新パッチを作成する場合、更新パッチのファイルサイズは小さくすることはできますが、作成作業はフルインストーラーを作成するのとあまり変わりません。また、更新ファイルしか含みませんが、インストーラーです。そのため、インストールした後は、ファイルが更新される以外に、レジストリーなどシステムに多くの不要な情報を残してしまいます。

後者の方法で更新パッチを作成する場合、多くの場合、最小のファイルサイズで更新パッチを作成することができます。また、作成したパッケージは、自己展開形式EXEファイルでファイルを展開するのみなので、レジストリーなどシステムに不要な情報を残すこともありません。

ただし一つ問題があります。ファイルを展開する場所が、ユーザーが指定した場所となり、アプリのインストールフォルダーに直接展開できません。展開した後、ユーザーがアプリのインストールフォルダーにコピーする必要があります。また、ユーザーがコピーすることにより、間違って古いファイルで置き換えてしまうこともあります。

File Package Appによるファイル更新パッチ

自己展開形式EXEファイルを作成するアプリで作成したパッケージはユーザーが指定したフォルダーに展開するだけのものが多いです。

しかし、File Package Appでは、ユーザーではなく、パッケージ作成者が指定したフォルダーに直接展開することもできます。また、ファイルの更新条件を指定することにより、条件に一致した時のみ更新したり、ファイルが存在した時のみ更新したりできます。もちろん、パッケージの主機能はファイルを展開することであり、展開後にレジストリーなどのシステムに不要な情報を残すこともありません。

そもため、File Package Appで、理想的なファイル更新パッチを作成することができます。

しかしながら、File Package Appの主機能はファイル展開です。インストーラー作成ツールで利用できるようなスクリプトなどは使えず、また、ファイル展開以外の操作(レジストリーの更新など)はできません。そのため、インストーラーの代替えとすることはできません。この点は注意してください。

ファイル更新パッチの作成の手順

File Package Appを使った、ファイル更新パッチの作成の手順は以下の通りとなります。

  1. ソースフォルダーを設定する
  2. 展開先のルートフォルダーを設定する
  3. ファイルの更新条件を設定する
  4. パッケージを作成する

ここに示した手順はファイル更新パッチを作成するときに必要な最低限の手順です。File Package Appの他の機能を使う場合は、それらの機能の設定も必要となります。

ここでの例では、以下の想定で、更新パッチのパッケージを作成します。

アプリのインストールフォルダー
C:\Program Files(x86)\nishy software\Test App\

上記のフォルダー配下のファイルを以下の条件で更新する

  • FileA.ico: ファイルを無条件に更新する。
  • FileB.exe: ファイルバージョンが新しい場合のみ更新する。
  • FileC.exe: ファイルが存在し、ビルド日時が新しい場合のみ、ファイルをコピーする
  • FileD.exe: ファイルを削除する

拡張機能を有効化する

今回のファイル更新のパッケージでは、拡張機能を利用するため、拡張機能を有効化します。拡張機能が必要な理由は、

  • 展開先の「フォルダーの種類」に「Program Filesフォルダー」を利用すること
  • 展開先にファイルが存在した時の振舞に「条件付き更新」を利用すること

です。

拡張機能を有効化する

ソースフォルダーを設定する

更新・削除したいファイル(FileA.ico / FileB.dll / FileC.dll / FileD.dll)を一つのフォルダーに配置する。

ソースフォルダーを準備

このフォルダーをウィザードの手順3の「パッケージフォルダー」画面で、ソースフォルダーとして設定します。

ソースフォルダーを設定

左上のフォルダーアイコン(+)をクリックするとソースフォルダーを追加できます。

展開先のルートフォルダーを設定する

ウィザードの手順3の「パッケージフォルダー」画面で、上部のラジオボタンから「ルートフォルダー」を選択します。

今回のパッケージの展開先フォルダーは、

アプリのインストールフォルダー
C:\Program Files(x86)\nishy software\Test App\

を想定しています。そのため、ソースフォルダーグループの展開先の「フォルダーの種類」を「Program Filesフォルダー (x86)」に設定します。また、その展開先フォルダーを「nishy software\Test App」に設定します。

展開先フォルダーを設定

ファイルの更新条件を設定する

ウィザードの手順3の「パッケージフォルダー」画面で、上部のラジオボタンから「ファイル」を選択します。

今回の場合、ファイルの一つごとに更新条件が異なるため、ファイル一つ一つに対して、更新条件を設定します。もし、ソースフォルダー配下のファイルの更新条件がすべて同じ場合は、そのフォルダーに対して更新条件を設定すれば、配下のファイルはすべて同じ更新条件にできます。

今回のパッケージの展開ファイルの展開条件は、

ファイルを以下の条件で更新する
 FileA.ico: ファイルを無条件に更新する。
 FileB.exe: ファイルバージョンが新しい場合のみ更新する。
 FileC.exe: ファイルが存在し、ビルド日時が新しい場合のみ、ファイルをコピーする
 FileD.exe: ファイルを削除する

を想定しています。

ファイルの上書き条件を設定

そのため「ファイルが存在した時」の振舞いは、それぞれ、「継承(上書き)」、「条件付き更新」、「条件付き更新(存在する場合のみ)」、「削除(存在する場合のみ)」を設定します。

「継承(xxx)」を選んだときは、親フォルダーの設定がそのまま継承されます。この場合は、親フォルダーの設定が「上書き」となっているので、「継承(上書き)」となっています。

条件は、それぞれ「設定せず」、「バージョン」、「ビルド日時」、「設定せず」を選択します。これにより、FileB.exeは「バージョン」が新しいときのみ更新され、FileC.exeは「ビルド日時」が新しいときのみ更新されます。

パッケージを作成する

作成ボタンをクリックしてパッケージを作成します。

ファイル更新のパッケージの作成

これで、ファイル更新パッチの作成が完了です。

パッケージを実行する

作成したパッケージを実行すると、設定どおりにファイルが更新・削除されるのが確認できます。

更新対象のすべてのファイル(4ファイル)が存在する場合

更新対象のすべてのファイルが存在する場合は、更新前の状態が以下の通りとします。

4つのファイルの更新前

この状態で、作成したパッケージを実行します。

パッケージの実行完了画面

パッケージの実行後は、3つのファイルが更新され、一つのファイルが削除されていることが確認できます。

4つのファイルの更新後

更新対象の一部のファイル(3ファイル)が存在する場合

更新対象の一部のファイルが存在する場合は、更新前の状態が以下の通りとします。

3つのファイルの更新前

この状態で、作成したパッケージを実行します。

パッケージの実行完了画面

パッケージの実行後は、2つのファイルが更新され、一つのファイルが削除されていることが確認できます。FileC.exeは、存在する場合のみ、条件付きで更新する設定にしました。そのため、この場合は、FileC.exeが存在しなかったので、ファイルは追加・更新されていません。

3つのファイルの更新後

標準機能を利用している場合は、無償のまま利用できます。しかし、拡張機能を利用する場合は、ライセンスファイルが必要となります。ライセンスファイルが必要な場合は、ご連絡いただければ対応いたします。ただし、有償となります。


以上、File Package Appを使った更新パッチのパッケージの作成方法でした。

コメントを残す