2009-11-17 63 views
4

有誰知道在滿足某些條件時是否/如何阻止基於WiX的MSI安裝程序進入下一個對話框?我有以下代碼:避免用WiX安裝程序中的條件進行下一個對話框

<Dialog Id="SelectIISApplicationPoolUserDialog" Width="370" Height="270" Title="$(var.ApplicationPoolUserDialogTitle)"> 
    <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)"> 
    <Publish Property="APPLICATIONPOOLUSER" Value="{}">WEBSITE_APPLICATIONPOOLUSERTYPE = "local"</Publish> 
    <Publish Property="APPLICATIONPOOLUSER" Value="1">WEBSITE_APPLICATIONPOOLUSERTYPE = "domain"</Publish> 
    <Publish Event="DoAction" Value="CheckPortNumber">1</Publish> 
    </Control> 

CheckPortNumber指的是這樣的:

<Binary Id="IISCA" SourceFile="binaries/MyCustomActions.IIS.CA.dll" /> 
<CustomAction Id="CheckPortNumber" 
       BinaryKey="IISCA" 
       DllEntry="IsFreePort" 
       Execute="immediate" /> 

此外,在其他地方,我們有這樣的聲明:

<Publish Dialog="SelectIISApplicationPoolUserDialog" 
     Control="Next" 
     Event="NewDialog" 
     Value="SetSqlServerConnectionDialog">ISPORTFREE</Publish> 

當我運行安裝程序,並獲得選擇應用程序池用戶的對話框,然後單擊下一步。自定義操作然後檢查端口號並設置ISPORTFREE變量。但是,不管ISPORTFREE的結果如何,下一個對話框都不顯示。但是,當我再次單擊下一步時,會顯示下一個對話框。

所以我想要的是:當我點擊next並且輸入的portnumber被使用時,我得到一個警告並且不會進入下一個對話框。如果它沒有被使用,我會進入下一個對話框。

回答

8

您需要設置Publish/@Order,以便按正確的順序評估所有內容。

像下面大概應該工作:

<Publish Dialog="MyDlg" Control="Next" Event="DoAction" 
     Value="SomeAction" Order="1">1</Publish> 
<Publish Dialog="MyDlg" Control="Next" Event="SpawnDialog" 
     Value="MyWarningDlg" Order="2">Not CONDITION</Publish> 
<Publish Dialog="MyDlg" Control="Next" Event="NewDialog" 
     Value="MyOtherDlg" Order="3">CONDITION</Publish> 
+0

感謝。它工作,但我也有不同的檢查:ISPORTFREE =「False」,因爲在自定義操作中,你必須插入字符串到會話對象:session [「ISPORTFREE」] = false.ToString(); – Peter 2009-11-18 09:24:36

相關問題