2016-09-28 56 views
0

設定我有要根據屬性值被選擇或取消選擇的特徵屬性值:條件內部功能會忽略在自定義動作

<Feature Id="featHAService" Title="!(loc.HAService)" AllowAdvertise="no" Level="1"> 
    <Condition Level="3"> 
    <![CDATA[PROP_IS_FIRST_INSTALLATION="0"]]> 
    </Condition> 
</Feature> 

在C#自定義操作,在顯示包含要素樹的CustomizeSetup對話框之前,我根據某些邏輯設置PROP_IS_FIRST_INSTALLATION,無論值爲0還是1,Feature Level始終爲1.爲了進行調試,我停止觸發自定義操作並手動更改了PROP_IS_FIRST_INSTALLATION的值int * .wxs文件,並且條件按預期工作。任何想法爲什麼改變它在自定義操作不起作用?

+0

您檢查安裝日誌文件?在功能選擇之前是否調用自定義操作?日誌文件應該指出所有屬性更改的順序和值。 –

+0

是的,該屬性的值是正確的 – eddyuk

回答

1

檢查這些調用發生的順序順序,因爲功能條件在CostFinalize操作期間進行評估,所以您的自定義操作必須在CostFinalize之前。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa368014(v=vs.85).aspx

這是更常見的在我看來,在這些情況下,有一個DoAction ControlEvent資料。對話框事件可以在所需功能上執行ADDLOCAL,在另一個上執行刪除操作。自定義操作可以通過正在安裝的功能的特徵條件觸發,例如& FeatureName = 3。這裏有一個例子:

How to set the list of features which will be installed if the button was pushed?

+0

實際上,它不是發生在順序自定義操作中,而是發生在對話框之間的轉換中。有一個自定義動作是在點擊按鈕時觸發的,在該自定義動作中,如果功能應該是1或3級,則存在邏輯 – eddyuk

+0

如果在CostFinalize之後,則會出現問題。 – PhilDW