複数言語対応のインストーラーでマイナーアップグレードを実行した際に、以下のような
2254 エラーで、マイナーアップグレードが失敗します。
------------------------------------------------------------------------------------------------------------------
Error 2254: Database: Transform: Cannot update row that doesn't exist. Table: Property
1: 2254 2: 3: Property
変換するときにエラーが発生しました。指定された変換のパスが有効であることを
確認してください。
------------------------------------------------------------------------------------------------------------------
対象プロジェクト:基本の MSI, InstallScript MSI
[概要]
2254 エラーは、キャッシュされているトランスフォームが破損している場合やトランスフォームを
正しく適用できなかった場合に発生するエラーとなります。
言語トランスフォームを使用する複数言語インストーラーで、マイナーアップグレードを実行した場合
に発生することがあります。
複数言語のインストーラーでは、デフォルト言語以外の言語実行時には MSI データベースに
言語のトランスフォームを適用してインストールを行います。
マイナーアップグレードの実行時には、MSI データベースは再キャッシュされて 新バージョンの
MSI データベースへ置き換えられますが、言語情報を持つトランスフォームはキャッシュされている
以前のバージョンのトランスフォームが適用されます。
このとき、旧バージョンで存在したレコードが新バージョンで存在しない場合、データベースに
存在しないレコードを更新しようとしてトランスフォームの適用に失敗します。
[回避方法]
本事象が発生する場合、以下のいずれかの方法で回避を行います。
(a)メジャーアップグレードを実行する
本事象はマイナーアップグレードで発生する事象のため、アップデート方法をメジャーアップグレード
へ変更します。
(b)エラーメッセージに表示されているテーブルで、欠損しているプロパティを追加する
旧バージョン、新バージョンそれぞれのプロジェクトで、エラーに表示されているテーブル
(例Property テーブル)の内容を比較します。
プロジェクトを開き、[追加ツール]-[ダイレクトエディタ]でテーブルの内容を確認できます。
旧バージョンに存在していて、新バージョンで存在していないエントリを検索し、新バージョンの
テーブルにそのプロパティを追加します。