バージョンアップツールを作る(8)~バージョンチェック追加
LHA自己解凍書庫を使ったバージョンアップツールだが、実際に使用する上での課題が見つかった。‘さまれぼ!’では、多くのファイルが更新されるメジャーバージョンアップなどで簡単インストーラを利用し、それ以外の細々としたマイナーバージョンアップで自作ツールを使うことを想定している。マイナーバージョンアップでは、直前のメジャーバージョンアップに対して変更のあったファイルを提供することになるが(Windowsなどのサービスパック方式)、メジャーバージョンアップを重ねていった場合、古いメジャーバージョンに対して最新のマイナーバージョンアップを適用されてしまうと、システムに不整合が生じる。これを避けるには、マイナーバージョンアップで適用先のバージョンチェックを行う必要がある。
それでバージョンチェックを行う方法を考えたのだが、二つのポイントがある。一つはバージョン確認方法、もう一つは適用対象バージョン指定方法。
まず適用先のバージョンをどうやって確認するかということだが、システムバージョンを格納したファイルがあるので、そこから取得するのが一番確実だ。しかし、暗号化しているのでそれなりの手続きを踏まないと読むことができないし、汎用性もなくなる。そこで、簡単インストーラの設定ファイル(install.DAT)を利用することを考えた。ここにもシステムバージョンが記録されていて、INI形式のファイルなので簡単に読めるのだが、簡単インストーラ限定になってしまう。それで、確実性という点では少し劣るが、ファイルのタイムスタンプでチェックするようにした。システムバージョンを格納したファイルのタイムスタンプが、指定した日付以降ならバージョンアップ対象とみなすわけだ。これで適用先のバージョンが古いケースを除外できるし、逆に新しい場合は適用先の方が更新対象ファイルのタイムスタンプが新しいために上書きされることはない。
次に適用対象のバージョンをどのように指定するかということだが、普通に考えればファイルで指定する方法だろう。ただ、このためにわざわざファイルを用意するのは、ファイルの読込処理を追加したり、運用時に一つ余計にファイル指定が必要になったりと面倒。それで、プログラムの引数として与えられないかとLHA自己解凍書庫のドキュメントに目を通すと、与えられることがわかった。
というわけで、プログラムのオプションとして引数で渡すことにした。今後の機能追加に備えて、オプション判別に「-D」を指定することにして、ファイルパスと日付を「,」区切りで渡すことにした。しかし、思ったように動作しない。「,」は特別の意味を持つようだ(ドキュメントに「"」でエスケープが必要みたいなことが書いてある)。
そのようなわけで、最終的に次のような指定になった。
>$Command=%WORK%\SMSVUP\PAD20090401\VerupTrigger.exe -DDATALIB\Version.ini?2009/3/20
この例の場合は、「DATALIB\Version.ini」のタイムスタンプが「2009/3/20」以降ならばバージョンアップを行うことになる。
以上でバージョンアップツールの修正は終了。



























































