3

基本的な MSI プロジェクトがあります。メイン アプリケーションに統合されている別の MSI 製品をインストール時に削除する必要があります。アップグレード シナリオを使用して、それをメジャー アップグレードとして扱うようにしました。ただし、アップグレードコードが一致しないため、これは機能しませんでした。

次に、CostFinalize の後に msiexec.exe を実行するカスタム アクションも作成しました (これは Installshield ヘルプに記載されていたと思います)。他の廃止された製品がインストールされていないと、インストーラーが失敗します。システム検索で設定したカスタムアクションに条件をつけてみましたが、システム検索は機能が制限されているようです。レジストリキーをチェックしてブール値のプロパティを設定することはできません。

何か案は?

4

2 に答える 2

6

いくつかの考慮事項

1) UpgradeTable ( FindRelatedProducts / RemoveExisting Products ) を使用して、別の製品の UpgradeCode に関連付けられた ProductCode を削除できます。

2) メモリが機能する場合、MSI は Per-Machine インストール中に Per-User 製品を削除しません (またはその逆)。コンテキストは同じでなければなりません。

3) サイレント インストール中に UI シーケンスが実行されません。

4) マシンごとに 1 つの実行シーケンスのみのシステム全体のミューテックスがあるため、実行シーケンスから msiexec を実行することはできません。

5) UI でスケジュールする場合 (サイレント インストール中は実行されないため、実行すべきではないと既に説明しました)、プロセスごとに 1 つの UI のみを示す別のミューテックスがあります。

ユーザーごとからユーザーごと、またはマシンごとからマシンごとに移行する場合は、カスタム アクションを記述せずに、アップグレード要素/テーブル行を使用して、必要なことを実行できるはずです。それ以外の場合は、msiexec の世界に入る前に、アンインストールを処理するための setup.exe スタイルのブートストラップが必要になります。

于 2010-03-10T03:48:25.323 に答える