奇妙な理由で、更新したいすべてのコアコンポーネント(exe、dll)が「このコンポーネントをWindowsインストーラーに登録しない」に設定されていました。これは非常に古く、さまざまなAdvanced Installerバージョン(7、8、および9)を介して移行されたため、これはある種のプロジェクトのバグだと思います。
とにかく、パッチを修正してもアプリケーションを正しく更新できませんでした。Windowsインストーラーは、ターゲットイメージのmsiファイル(以前のバージョンのキャッシュされたインストーラー)を参照するように要求し続けました。
ただし、すべての顧客がこれらのファイルを保持しているわけではありません(通常、このキャッシュされたファイルは%APPDATA%フォルダーに保存されます)。だから私は回避策を見つけました:
- MsiFileHashテーブルを作成するために「ハッシュファイル」オプションを適用しました
- mspパッチをブートストラッパー(exeファイル)にパックしました。ブートストラッパーは、次のコマンドラインパラメーターを使用してTWICEで開始します。
初めて:
"myPatch.msp" /n {150F6CE2-8C12-414B-9377-F087A62E6B67} REINSTALLMODE=c /qb
2回目:
"myPatch.msp" /n {150F6CE2-8C12-414B-9377-F087A62E6B67} REINSTALLMODE=dep /qb
REINSTALLMODE = cスイッチは、ハッシュに基づいてファイル比較アルゴリズムを強制するため、元のセットアップソースは必要ありません。
REINSTALLMODE = depは、他のすべての欠落ファイル、不明または異なる(ターゲットとは異なる)バージョンのファイルを復元します
この回避策が、AdvancedInstaller以外のMSI/MSPオーサリングツールを使用するユーザーに役立つことを願っています。