与えられた:
- Wix 3.0 を使用して MSI を作成します。
- 製品は複数の機能で構成されています。
- 各機能にはいくつかのサブ機能があります。これは標準の MSI 機能ツリーです。
- 各機能またはサブ機能は、複数の外部コンポーネントに依存しています。例: .NET 4、ASP.NET など
- Wix 3.0 SDK を使用して C# で記述されたカスタム アクションは、これらの依存関係を処理し、特定の機能セットに対してコンポーネントが存在するかどうかを評価します。
- インストール時に、指定された機能の選択に対して依存コンポーネントが欠落している場合、インストールは失敗します。
達成すること: 特定のマシンに MSI をインストールすることなく、インストール中にカスタム アクションとして MSI で既に実行されている前提条件チェックを実行する機能。
失敗した試行:
1) カスタムアクションには、このような関数シグネチャがあります
[CustomAction]
public static ActionResult ProcessFeaturePrerequisite(Session session);
セッションオブジェクトを取得するために、Wix 3.0 SDK にある次の API を使用しました
Session session = Installer.OpenPackage("Pathto\\Product.msi", true); // true doesn’t install it. Also tried with false, but didn’t work.
上記のセッションで上記のメソッドを呼び出すと、次のことが失敗します。
session.Features["SomeFeature"].CurrentState;
これは例外をスローします。
System.ArgumentException was unhandled by user code
Message=Feature ID not registered. SomeFeature
Source=Microsoft.Deployment.WindowsInstaller
StackTrace:
at Microsoft.Deployment.WindowsInstaller.FeatureInfo.get_CurrentState()
また、前提条件のステータスを決定する重要な API の下では、常に false が返されます。
session.EvaluateCondition(prereq);
2) 上記の MSI に機能を指定してインストールするコマンド ラインの方法を知っています。こんなふうになります
msiexec /i "Product.msi" ADDLOCAL=ALL REMOVE="Foo,Bar "
インストールを開始せずにセッション オブジェクトを返す追加のパラメーターを渡すことができる API が SDK に見つかりませんでした。私の推測では、そのようなパラメーターを渡すと、session.Features がより有効になります。
質問: では、どうすれば上記の目標を達成できますか? ある
- インストールを呼び出さずにカスタムアクションを呼び出すことができる Wix SDK の API はありますか?
- インストールせずに特定の MSI のコマンド ラインからカスタム アクションを呼び出す方法はありますか?
- アクションのみを評価するカスタムアクション名を含むコマンド文字列を受け入れるように MSI を変更するように Wix を作成する方法はありますか?
- 同じことをするより良い方法はありますか?