2011-07-08 63 views
6

我有一個安裝程序,根據是否設置屬性將網站部署爲SSL或非SSL IIS站點。我被要求添加設置端口的選項,這不是問題,但是如果未設置該值,我想將端口設置爲默認值(80或443)。有條件地將單個WiX屬性設置爲不同的值

我想是這樣的:

<SetProperty Id="OUTPORT" Before="InstallFiles" Value="80"><![CDATA[SSL=0]]></SetProperty> 
    <SetProperty Id="OUTPORT" Before="InstallFiles" Value="443"><![CDATA[SSL=1]]></SetProperty> 

但是,很顯然,維克斯抱怨有重複的ID SetOUTPORT自定義操作。

我在這裏跳下另一個WiX形狀的兔子洞嗎?

回答

6

SetProperty現在支持Action屬性,當您希望爲具有不同條件的相同屬性使用多個SetProperty元素時,您可以指定自定義操作ID。

+0

完美@Bob。當我第一次看到「CustomAction」時,我想我將不得不在託管代碼中完成所有操作。 –

+3

這似乎不是有效的(?不再有效)http://wix.sourceforge.net/manual-wix3/wix_xsd_setproperty.htm –

13

接受的答案在需要轉換爲完全寫出自定義操作和排序(不再是?)時是不正確的。

作爲每對維克斯  3文檔,SetProperty Element

如果不設置的SetProperty \ @Action

<SetProperty Id="OUTPORT" Before="InstallFiles" Value="80"><![CDATA[SSL=0]]></SetProperty> 
<SetProperty Id="OUTPORT" Before="InstallFiles" Value="443"><![CDATA[SSL=1]]></SetProperty> 

Duplicate symbol 'CustomAction:SetInstallFiles' found 

動作字符串。默認情況下,該操作是「設置」+ Id屬性的值。如果多個SetProperty元素以相同的Id爲目標(可能具有互斥條件),則此可選屬性可以覆蓋操作名稱。

以下工作無需更改爲編寫自定義操作。

<SetProperty Action="SetInstallFiles0" Id="OUTPORT" Before="InstallFiles" Value="80"><![CDATA[SSL=0]]></SetProperty> 
<SetProperty Action="SetInstallFiles1" Id="OUTPORT" Before="InstallFiles" Value="443"><![CDATA[SSL=1]]></SetProperty> 

它在WiX 3.7中工作,我不確定它可用的第一個版本。

+1

是的,SetProperty和SetDirectory已得到增強以支持此方案。 –

+0

@Greg,我認爲用這個信息編輯原始答案是一致的。 –