2016-08-09 13 views
0

問題:2つの製品インストーラ(ABは)同じパスにインストールされている共有コンポーネントのセットを有します。 Aにはv1共有コンポーネントが含まれ、Bにはv2が含まれます。WIXで共有コンポーネントの依存関係を定義するにはどうすればよいですか?

しかし、インストーラBもV2共有コンポーネントが依存する追加の共有成分を含有します。

両方をインストールすると、共有コンポーネントの参照カウントは2ですが、カウント1の新しい共有コンポーネントは除きます。インストーラBがアンインストールされると、新しいコンポーネントは削除されますが、他の共有コンポーネントはダウングレードされないため、DLLがないために失敗します。

問題をWIXで、この依存関係を表現する、あるいは解決する方法はありますか?

私は、既存のコンポーネントに新しいリソースを追加することによってこの問題を解決できますが、経典は「一つのファイル、一つの成分」私はから来決定づけます。

+0

新しいDLLを既存のコンポーネントに追加して、キーパスファイルを同じにして解決しました。これは、製品を任意の順序でアンインストールできることを意味します。 – Robin

答えて

1

あなたが試みることができる物事のカップルが、AとBの両方が既に配備されている場合は、あなたが言及していないいくつかの制約があるかもしれません:

  1. あなたが行方不明を追加するパッチを作ることができますDll、既存のフィーチャーに同じコンポーネントIDなどを使用して追加します。パッチをインストールするときにREINSTALL = [そのフィーチャー名]を使用する必要があります(REINSTALL = ALLがデフォルトの場合もあります)。 Aへのアップグレードは、メジャーアップグレードを含む問題を修正することができますが、Aがメンテナンスされていないレガシー製品であれば、これは容認できないものではありません。あなたは、おそらく別個の新しいMSIなどのDLL、同じコンポーネントIDなど、およびBと新しいMSIをインストールするためにバンドルを使用することをインストールすることができ

  2. 。あなたのDllには2つのリファレンスカウントがあります.1つはB、もう1つは新しいMSIです。新しいMSIには、Aが存在し、Bが存在しない場合、そのアンインストールを禁止するロジックがあります。または、動作する依存関係が存在する可能性があります。

+0

興味深い。 Aはすでに広く公開されているので、オプション1は使用できません。 2は、渡されるべき多くの仕事や知識のように感じます。私は、最も安全な解決策は、既存のコンポーネントにDLLを追加するだけかもしれないと思う。 out-of-orderアンインストールは、ファイルが残っていることを意味しますが、それは巨大ではなく、不安定さは実際の失敗よりも厄介です。あなたの提案をありがとう! – Robin

関連する問題