私はいくつかの機能 (A、B、C) で構成される製品を持っており、そのすべてが共通の Windows サービス コンポーネントを共有しています。キャッチは、最終的なケースがあることです:「レガシーモード」フラグ(レジストリに保存されるいくつかのプロパティ)を使用して、特定の機能(機能C)が1つだけインストールされている場合、このwindows-serviceコンポーネントはインストールされるべきではありませんインストールするか、スタートアップの種類を「自動」から「無効」に変更する必要があります。無効なスタートアップ タイプのソリューションよりも、「インストールされていない」ソリューションをお勧めします。
他のすべての場合: この機能 (C) 以外に他の機能 (A、B) がインストールされている場合、または「レガシー モード」フラグが設定されていない場合 - Windows サービス コンポーネントをインストールし、そのスタートアップの種類を設定する必要があります。 「自動」に。
製品が再構成された場合、状態を再評価し、両方のシナリオに対して適切に対処する必要があります。
問題は、機能のインストール状態とコンポーネントの状態の両方が同じ CostFinalize アクションで評価されるため、Windows サービス コンポーネントの状態で機能のインストール状態を使用できないことです ( http://www.joyofsetupを参照)。 .com/2008/04/09/feature-states-in-component-conditions/ ) また、カスタム アクションでコンポーネントを削除するアプローチを使用しても機能しません。メジャー アップグレードです ( http://blogs.msdn.com/b/heaths/archive/2010/02/15/test-your-conditions.aspxを参照) 。
コンポーネントを独自の別の機能に分離し、CostFinalize 操作の後に他の機能のインストール状態に基づいてこの機能のインストール状態を設定するカスタム アクションを作成しようとすることもできますが、それは別の機能のインストール ロジックを複雑にする継ぎ目があります。シナリオ (インストール、再構成、ロールバック、アンインストール) を修正し、エラーを起こしやすくします。
何を提案しますか?