2012-04-28 33 views
3

我想根據某些值在安裝中包含不同的dll。所以,我試圖根據使用自定義操作設置的屬性加載組件。WiX無法檢查使用CustomAction設置的屬性

在WXS文件:

[CustomAction] 
     public static ActionResult GetPropVersion(Session session) 
     { 
    session["PropDllVersion"] = "19"; 
     } 

我可以在這個屬性更改爲19 MSI日誌文件中看到,但是xyz.dll:

... 
<Property Id="PropDllVersion" Value="0" /> 
... 
<CustomAction Id="CheckPropDllVersion" BinaryKey="CustomAction1.dll" DllEntry="GetPropVersion" Return="ignore" Execute="immediate"/> 
... 
<InstallExecuteSequence> 
    <Custom Action="CheckPropDllVersion" After="ValidateProductID" />  
</InstallExecuteSequence> 
... 
    <Component Id="Test" 
    Guid="B81F832D-2D96-4169-9BD0-8D77098FEC60"> 
    <Condition><![CDATA[PropDllVersion = "19"]]></Condition> 
    <File Id="File15" 
     Name="xyz.dll" 
     Vital="yes" 
     KeyPath="yes" 
     AssemblyManifest="File5" 
     AssemblyApplication="File5" 
     Assembly=".net" 
     DiskId="1" 
     /> 
    </Component> 
... 
在定製操作文件

然後未包含在安裝中。它看起來像PropDllVersion沒有設置在條件水平,或者我做錯了什麼...我試圖排序它在許多其他地方仍然不工作...

如果我使用全局屬性條件,而不是我的財產,它的作品!

+2

不知道爲什麼我對這個問題得到了負面的評價。並不是說我沒有嘗試過這裏介紹的所有其他解決方案。將欣賞的負面評價到這個問題的原因... – Samuel 2012-04-28 12:48:29

回答

3

請注意,private properties(其名稱包含小寫字母)在InstallExecuteSequence使用它們的默認值。所以你應該使用一個public property,例如PROP_DLL_VERSION。

+0

我昨天試過,它沒有工作,也許忘了編譯自定義操作。現在嘗試,它的工作原理! – Samuel 2012-04-30 12:59:25