2013-05-02 9 views
6

私は2つのカスタムダイアログボックス(必要なものと加えてExitDlg,FatalErrorDlgなど)を持っています。最初のものはEditコントロールを使用してプロパティを設定し、 Textコントロール。ここでは、意味のあるコードは次のとおりです。WiXのダイアログボックス(InstallUISequence)間にカスタムアクションを挿入

<Dialog Id="DialogA" ...> 
    <Control Id="ControlEdit" Type="Edit" Property="MY_PROPERTY" .../> 
    <Control Id="ControlNext" Type="PushButton" ...> 
    <Publish Event="EndDialog" Value="Return" /></Control> 
</Dialog> 

した後、第2のダイアログ:

<Dialog Id="DialogB" ...> 
    <Control Id="ControlText" Type="Text" Text="[MY_PROPERTY]" .../> 
    <Control Id="ControlBack" Type="PushButton" ...> 
    <Publish Event="EndDialog" Value="Return" /></Control> 
    <Control Id="ControlNext" Type="PushButton" ...> 
    <Publish Event="EndDialog" Value="Return" /></Control> 
</Dialog> 

そしてアクションシーケンス:

<InstallUISequence> 
    <Show Dialog="DialogA" Before="MyCustomAction" /> 
    <Custom Action="MyCustomAction" Before="DialogB" /> 
    <Show Dialog="DialogB" Before="ExecuteAction" /> 
</InstallUISequence> 

カスタムアクションはMY_PROPERTYの値を変更します。私の問題は、戻るボタンをDialogBにする方法です。DialogAに戻ります。 NewDialogを使用するのは簡単ですが、ダイアログの間で実行するカスタムアクションを取得できませんか?


編集 - 2013年5月2日

@caveman_dickからの回答後、私は彼が言ったように、ほぼDialogAを変更しようとしましたが、代わりにEndDialogを使用して、私はAction="NewDialog" Value="DialogB"に変更しました。しかし、カスタムアクションは呼び出されていません。次のダイアログに行くためにPublishイベントを削除すると、CAが呼び出されます。 @caveman_dickが言ったように私が残すと、私はDialogAに戻ることができませんDialogBから。


編集 - 2013年5月2日

のWiX 3.6ブックで検索した後:開発者ガイドWindowsインストーラのXML、私は以下のが見つかりました:「あなたは1パブリッシュ以上のものを持っている場合イベントの場合は、内部テキストとして条件文が必要です。そうでない場合は、すべてのイベントが公開されません。

ので@caveman_dickからの答えはあなたが以下に変更する必要があることを除いて、正しいです:

<Publish ...>1</Publish> 

答えて

8

よりもむしろInstallUISequenceにカスタムアクションをスケジュールするあなたはボタンのクリックでそれを公開することができます。

<Dialog Id="DialogA" ...> 
    <Control Id="ControlEdit" Type="Edit" Property="MY_PROPERTY" .../> 
    <Control Id="ControlNext" Type="PushButton" ...> 
     <Publish Event="DoAction" Value="MyCustomAction">1</Publish> 
     <Publish Event="EndDialog" Value="Return">1</Publish> 
    </Control> 
</Dialog> 

編集:Publish要素の条件を明示的に評価してtrueにする必要があるため、Publish要素のテキストとして"1"を追加してください。

+0

私はあなたのアプローチを試みましたが、そのアクションは呼び出されていません。 'EndDialog'を使う代わりに、私は' NewDialog'を使って戻ることができます。イベント「NewDialog」を削除すると、そのアクションが呼び出されます。 – Marlos

+0

問題の編集では、複数のイベントを有効にするために条件を追加する必要がありますが、その答えは部分的に正しいものであり、問​​題を解決します。 – Marlos

+0

私はちょうどその答えを編集しようとしていました。私はひどくあなたのコードをコピー貼り付けました。しかし、認識のおかげで! :) –

関連する問題