MERGE MODULE INSTALLのメジャーアップグレード中に失敗しました
-
21-12-2019 - |
質問
私は、ソフトウェアマネージャのマージモジュールなしで flexnet connect を含む InstallShield InstallScript MSI プロジェクトを持っています。この製品のバージョンは6.0.32です。私はソフトウェアマネージャのマージモジュールなしで flexnet connect も含まれているバージョン6.1用の2番目のインストーラを作成しました。 6.0.32バージョンを含むシステムでメジャーアップグレードを実行すると、MSIログのメッセージが表示されます。
Disallowing installation of component: {FF970098-B748-427B-B946-AA8E1A1F82AD} since the same component with higher versioned keyfile exists
.
コンポーネントは、 FlexNet Connectフォルダにあるisusweb.dll
ファイルを参照しています。
6.0.32
製品が削除される前にこのチェックが行われるようです。インストールは6.0.32
製品を削除するために進みます。これにより、isusweb.dll
が削除されます。 6.1
のインストール中に、Component Version Checkのためにisusweb.dll
が戻されません。
アップグレードは成功します。アプリケーションをショートカットから実行しようとすると、コンポーネントを検証します。 isusweb.dll
がMSIが見つからないため、修復を試みるので、MSIが見つからず、アプリケーションが開くことはできません。
常に上書きするためにマージモジュールを取得する方法はありますか?
他のヒント
マージモジュールはインストールされない、それらはマージされます。製品MSIがインストールされています。サードパーティのマージモジュールを使用するという問題の1つは、バグがある場合は、それについてできません。
このMSMをカプセル化する目的でのみMSIを作成することを検討します。その後、このMSIを製品MSIから取り付けるためのセットアップPREREQまたはスイートインストーラを作成します。
あなたはすでに2つの本当に良い答えを持っていますが、試して合成するために:
それは本当にバグのマージモジュールのように聞こえます。 Phil は、バグを回避するためにInstalleXecutesequenceでのあなたの担当者の配置を修正することを示唆しています。 Chris 故障したマージモジュールを独自のセットアップにすることをお勧めします。私は両方に同意し、両方の提案に従うべきだと思います:
- メインセットアップからマージモジュールを取り外します。
- 新しいセットアップを作成し、障害のあるマージモジュールを追加し、正しいREPシーケンスを確保します。
REPの修正は、コンポーネントの参照を処理するための修正が100%正しいです。これを問題として除去するには、個別のセットアップを作成すると、それ自身のMSI内のバグモジュールを含めることができます。これは、誤ってバグを再起動するのに役立ちます。将来的にはデザインが変更されたことを避けるのに役立ちます - そして後者はありそうもない。
クリスは言うように:マージモジュールは配信されず、マージされます。更新されたマージモジュールは私が知っているすべてのために利用可能かもしれませんが、それでもそれを含めることは賢明です。特にGAC(グローバルアセンブリキャッシュ)を扱っている場合は
私が遭遇したときに適用された別の解決策は、ORCAを使用して、mergeモジュール内のファイルテーブルから「バージョン」列を更新するように設定することでした。それを最大65535.65535.65535.65535に設定すると、これによりアップグレードが常にMERGEモジュールからDLLをインストールするように強制されます。