2011-01-23 8 views
2

私はウィックスインストーラを使用するための新たなんだと私は私のダイアログのいずれかに持っている 次へ]ボタンをコントロールしようとしているいくつかの問題を抱えています。私はWixメーリングリストでこの質問をしましたが、回答が得られなかったので、私はここで試しています。私はWixUI_Mondo.wxsを取って名前を変更しただけでなく、 に変更して、データベース接続をチェックするためのダイアログを追加しました。以下は私の修正WixUI_Mondo.wxsの 抜粋です:の制御次のボタンの状態は

<Publish Dialog="CheckDbConnectionDlg" Control="Next" Event="NewDialog" 
Value=VerifyReadyDlg">1</Publish> 
<Publish Dialog="CheckDbConnectionDlg" Control="Back" Event="NewDialog" 
Value=WelcomeDlg">2</Publish> 

は今私のCheckDbConnectionDlg.wxs以内に私はそれが私がのCustomAction内で設定プロパティを経由して状態を有効になって制御する をしようとしている[次へ]ボタンを持っています。 以下は、私がコントロールしようと だ[次へ]ボタンと私のCheckDbConnectionDlg.wxsの抜粋です。ここで

<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" 
Text="Next"> 
     <Condition Action="disable"> 
      <![CDATA[CONTINUE <> "True]]> 
     </Condition> 
     <Condition Action="enable"> 
      CONTINUE ="True" 
     </Condition> 
</Control> 

は私のカスタムアクションである私は、プロパティの設定よどこ:

[CustomAction] 
public static ActionResult TestSqlConnection(Session testSession) 
{ 
    ... 
    ... 
    ... 
    //If the connection is successful 
    testSession["CONTINUE"] = "True"; 

     // Else set the session to False 
    testSession["CONTINUE"] = "False"; 
} 

そして、私のProduct.wxsを

<UIRef Id="WixUI_CustomUI" /> 

<Binary Id="SqlCustomAction" SourceFile="SqlCustomAction.CA.dll" /> 
<CustomAction Id=CA_testSqlConnection" BinaryKey="SqlCustomAction" 
DllEntry="TestSqlConnection" Execute="immediate" Return="check" /> 

<InstallUISequence> 
    <Custom Action="CA_testSqlConnection" After="ExecuteAction" /> 
</InstallUISequence> 

何が起こるかである私はCheckDbConnectionDlgに取得するとき[次へ]ボタン は、私はそのダイアログ上で、私は、データベースへの の接続をテストするボタンがあり、それは良いことだと、私は次へ]ボタンtをしたい、それになりたいと無効になりますo を有効にすると、インストールを続行できます。そうでなければ、私はそれを無効にしておきたい。 接続が成功すると、[次へ]ボタンを有効にしませんが、 の場合は[戻る]をクリックし、次に[次へ]をクリックします。

誰かがこれを修正する方法を教えてもらえますか?

答えて

1

これは、Windowsインストーラの制限です。それは本当にイベント駆動ではありません。条件は、ダイアログ内で何かが起こったときではなく、ダイアログからダイアログに行くときにのみ評価されます。標準の回避策は、代わりに次のダイアログへの遷移を防ぐためにコントロールイベントに条件を設定することです。

+0

私はすでに条件を持っているが、それは私のCustomAction内で設定された条件に基づいています。上のコードを適切に機能させるために別の方法がありますか? – Lance

+0

コントロール要素に条件を設定すると、ControlConditionテーブルに行が作成されます。これは私が話しているMSIの部分の制限です。代わりに、この結果がControlEventテーブルの行になるため、条件をPublishElementに配置します。コントロールを有効/無効にすることはできませんが、次のダイアログに移動することはできません。 –

+1

この記事で@Daniel Powellが提供するソリューションを見てください。[リンク](http://stackoverflow.com/questions/4241863/wix-interactions-with-conditions-properties-custom-actions) – bigfoot

関連する問題