1. |
プログラムのバージョン番号を更新
上書きインストール時に、同名ファイルが存在する場合、ファイルを上書きするかどうかは、バージョン番号で判定されます。(バージョン番号を持つファイルの場合)
例えば、Visual Basic 6.0 (VB6) で開発したソフトであれば、該当プロジェクトを開き、プロジェクトのプロパティ内のバージョン番号を変更しましょう。
VB6のバージョン番号は、a.b.cの3桁で指定するようになっており、
となります。
ここで、コンパイルされた実行ファイルの「プロパティ−バージョン情報」を見ると、実際のバージョン番号は4桁で管理されていることがわかります。
具体的には、a.b.0.cとなっており、3桁目として0が既定されているようです。
本来、この3桁目は、ビルド番号となるはずですが、VB6にはビルドという概念がないため、省略されているものと思います。
例えば、VB6のバージョン指定を1.0.1とした場合、実際のバージョン番号は"1.0.0.1"となります。また、実行ファイルの「プロパティ−バージョン情報−詳細」の中では、別表記として、"1.00.0001"のように表されています。
|
|
2. |
製品コード(ProductCode)を更新
VSIで、バージョンアップしたいソフト用のVSIプロジェクトファイル("*.WJP")ファイルを開きます。
メニューのプロジェクト(P)−***のプロパティ(S)から、プロパティフォームを開き、製品情報タグの中の「製品コード」を変更します。(横にある「新規コード」ボタンをクリックします。)
なお、更新用コード(UpgradeCode)というものもありますが、これは商品ファミリーコードのようなものなので、変更する必要はありません。
もし間違って変更してしまうと、別の製品として認識されるようになってしまうので気を付けましょう。
もしもの場合に備えて、「更新用コード」メモしておくと良いかもしれません。
誤って更新してしまった場合でも、手入力で訂正できます。
また、VSI上からは確認できませんが、MSIファイルには、PackageCodeというものも存在します。
VSIでは、PackageCodeは、ProductCode(製品コード)と同じ値になります。
|
|
3. |
製品バージョン(ProductVersion)を更新
製品情報タグの中の「バージョン」を変更します。
VSIのバージョン番号は、a.b.c.dの4桁で管理されており、
a | メジャー番号 |
b | マイナー番号 |
c | ビルド番号 |
d | リビジョン番号 |
となっています。
4桁目はバージョンアップされているかどうか(既存ファイルを上書きするかどうか)のチェック対象とはならないので、最初の3桁のいずれか(またはその組み合わせ)を変更するようにします。
|
|
4. |
MSIファイルを生成
適用ボタンで変更内容を更新した後、ビルドしてMSIファイルを再作成し、VSIを終了します。
|
5. |
MSIファイルをOrcaで開く
作成したMSIファイルの上で右クリックして、「Edit with Orca」を実行し、Orca を起動します。
「Edit with Orca」は Orca をインストールすることで作成されます。
|
|
6. |
カスタムアクションを作成
テーブル「CustomAction」を開き、コマンド「ADD ROW」で、下記のレコードを追加します。
Action | Type | Source | Target |
CA_NEWFOUND | 19 | (空白) | これより新しいバージョンがインストールされています。 |
ここでは、インストール済みのバージョンよりも古いバージョンをインストールしようとした場合に、エラーメッセージを表示してインストールを中断する「動作」を追加します。
"Action=CA_NEWFOUND"は重複しない適当な名前で、"TYPE=19"は"Target"で指定されるメッセージの表示とインストールの中断を表す定数です。
|
|
7. |
処理フローを追加 1/2
テーブル「InstallExecuteSequence」を開き、コマンド「ADD ROW」で、下記のレコードを追加します。
|
8. |
処理フローを追加 2/2
テーブル「InstallUISequence」およびテーブル「InstallExecuteSequence」をそれぞれ開き、コマンド「ADD ROW」で、下記のレコードを追加します。
InstallUISequenceは、インストール作業を行うための準備の流れを設定するテーブルです。
このテーブルは、ユーザーがサイレントインストールを行った場合などに、処理されないこともありうるので、念のため、テーブル「InstallExecuteSequence」にも同様の処理を記述しておきます。
ここでは、バージョンチェック処理と、中断処理を追加します。
"Action=FindRelatedProducts"によって、インストール時(修復、アンインストールを除く)に、後述12のUpgradeテーブル内のUpgradeCodeがチェックされ、ActionPropertyに値(=製品コード)が代入されます。
なお、"FindRelatedProducts"は、その製品コードで初めてインストールされるときにだけ動作します。つまり、製品コードが変更されるケース、すなわちメジャーアップグレードのときにだけ動作し、製品コードが変更されないケース、すなわちマイナーアップグレードやスモールアップグレードのときは動作しません。
"Action=CA_NEWFOUND"は、"FindRelatedProducts"の処理により、カスタム条件"NEW_FOUND"(後述11)に値が代入されている時、前述8で指定したカスタムアクションCA_NEWFOUNDを実行することを意味します。
"Sequence"の数字は、実行される順番を表します。他のレコードと重複しない数字であれば何でも良いですが、中断処理が発動される場合に備えて、なるべく早い段階で処理を行うようにした方が良いでしょう。
|
|
9. |
プロパティを追加
テーブル「Property」を開き、コマンド「ADD ROW」で、下記のレコードを追加します。
|
10. |
テーブル「Upgrade」を追加
コマンド「ADD Table」でテーブル「Upgrade」を作成し、その後、コマンド「ADD ROW」で、下記のレコードを追加します。
UpgradeCode | VersionMin | VersionMax | Language | Attributes | Remove | ActionProperty |
upgrade code | (空白) | xx.xx.xxxx | (空白) | 256 | (空白) | OLD_FOUND |
upgrade code | xx.xx.xxxx | (空白) | (空白) | 2 | (空白) | NEW_FOUND |
UpgradeCode は、前述11のPropertyテーブルで確認することができます。
ここを編集する前に、あらかじめ前述11の時点でコピー(CTRL+C)をしておいて貼り付けると良いでしょう。
"xx.xx.xxxx"は、前述3で更新したバージョン番号(メジャー/マイナー/ビルド番号)です。(リビジョン番号を記述しても構いませんが、無視されます。)
"Attributes"には定数を指定します。"2"は「検索するが削除はしない」を意味し、"256"は「VersionMinを含む」(="VersionMinより大きい"ではなく"VersiuonMin以上"とする)事を意味します。
ちなみに、"VersionMax"を指定した場合で、"VersionMaxを含む"とする場合は、定数"512"を加えます。
"VersionMin"および"VersionMax"は、どちらか一方を必ず指定しなければなりません。
|
|
11. |
MSIファイルを保存
変更内容を保存して完了です。
|