2011-12-22 7 views
3

WIXセットアップでいくつかのカスタムアクションを定義しました。これらのアクションは、アプリケーションが依存するサードパーティEXEを呼び出します。ユーザは、これらのサードパーティアプリケーションを機能ツリーからインストールするか無視するかを決定します。私のCustomActionとバイナリタグは次のようになります。WIXカスタムアクションシーケンス

<InstallExecuteSequence> 
    <Custom Action="NL220_Action" After="InstallFinalize"><![CDATA[(&Optional_NL220=3)]]></Custom> 
    <Custom Action="NIC_Action" After="NL220_Action"><![CDATA[(&Optional_NIC=3)]]></Custom> 
</InstallExecuteSequence> 

すべてが正常に動作します:ユーザーが実行するためにどのサードパーティのインストーラパッケージを選択することができ、これらの

<CustomAction Id='NL220_Action' BinaryKey='NL220EXE' Return='asyncWait' /> 
<Binary Id="NICEXE" SourceFile="..\NL220.exe" /> 

<CustomAction Id='NIC_Action' BinaryKey='NICEXE' Return='asyncWait' /> 
<Binary Id="NICEXE" SourceFile="..\NIC.exe" /> 

さらに、私のInstallExecuteSequenceタグは次のようになりますインストーラーの終了時に実行されます。問題は、ユーザーが両方のサードパーティインストーラを選択すると、同時に実行されるため、2番目のカスタムアクションのAfter = "NL220_Action"属性が無視されるということです。これはなぜですか?

答えて

2

Custom Action Return Processing Optionsを指定すると、シーケンスの最後にasyncWaitの待機が発生します。この値を使うということは、成功するためのアクションが必要だが、成功するタイミングはまったく気にしないということを意味する。カスタムアクションが完了するのを待ってから先に進むと、それは同期しています。 2番目のアクションを実行する前に最初のアクションが完了するのを待つ必要がある場合は、最初のアクションを同期させるか、2つのアクションを1つの非同期アクションに結合する必要があります。

+0

return属性は、メインスレッドとカスタムアクションスレッドの関係を定義しています(したがって、カスタムアクションはメインスレッドと非同期で実行されます)。戻り値を「チェック」に変更したところ、期待通りに動作します。マイケルに感謝します。 – staterium

関連する問題