2011-01-23 77 views
2

我是新來的使用Wix安裝程序,我遇到了一些問題,試圖控制一個 下一步按鈕,我有我的對話框之一。我在Wix郵件列表上問過這個問題,但沒有得到答案,所以我在這裏嘗試。我帶了WixUI_Mondo.wxs並將其重命名爲 ,並將其修改爲包含用於檢查數據庫連接的對話框。下面是我的 修改WixUI_Mondo.wxs的一個片段:控制Wix安裝程序中的下一個按鈕狀態

<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的下一步按鈕 被禁用,因爲我想要它,在該對話框中,我有一個按鈕,用於測試連接到數據庫的 ,如果它很好,我希望Next按鈕t o啓用 ,以便繼續安裝;否則,我希望它保持禁用。 如果連接成功,它不會啓用「下一步」按鈕,但是如果 我點擊返回,然後點擊下一步。

有人能告訴我如何解決這個問題嗎?

回答

1

這是Windows Installer的限制。這不是真正的事件驅動。只有當你從對話框轉到對話框而不是對話框內發生的事情時,條件才被評估。標準解決方法是在Control Events上創建條件,而不是爲了轉移到下一個對話框。

+0

我已經有一個條件,但它是基於我在我的習慣中設置的條件。有沒有另一種方法可以重構上面的代碼以正常工作? – Lance 2011-01-24 11:48:31

相關問題