2012-05-07 54 views
0

我有一個情況我需要知道哪些功能是要安裝/卸載在變化模式,因此我就可以修改對話序列。WiX的功能狀態/修改

我的設置包括2個功能F_WEB_APPF_DATABASE,使我的生活更輕鬆,我發表了關於自定義對話框以下屬性下一個按鈕,以確定哪些功能安裝,安裝或將基於特徵卸載條件如下:

<Publish Dialog="CustomizeDlg" Control="Next" Property="IsDBInstalled" Value="Yes" Order="5"><![CDATA[!F_DATABASE > 2]]></Publish> 
<Publish Dialog="CustomizeDlg" Control="Next" Property="IsDBInstalled" Value="No" Order="6"><![CDATA[!F_DATABASE < 3]]></Publish> 

<Publish Dialog="CustomizeDlg" Control="Next" Property="IsWebInstalled" Value="Yes" Order="7"><![CDATA[!F_WEB_APP > 2]]></Publish> 
<Publish Dialog="CustomizeDlg" Control="Next" Property="IsWebInstalled" Value="No" Order="8"><![CDATA[!F_WEB_APP < 3]]></Publish>     

<Publish Dialog="CustomizeDlg" Control="Next" Property="IsDBSelected" Value="Yes" Order="9"><![CDATA[&F_DATABASE > 2]]></Publish> 
<Publish Dialog="CustomizeDlg" Control="Next" Property="IsDBSelected" Value="No" Order="10"><![CDATA[&F_DATABASE < 3]]></Publish> 

<Publish Dialog="CustomizeDlg" Control="Next" Property="IsWebSelected" Value="Yes" Order="11"><![CDATA[&F_WEB_APP > 2]]></Publish> 
<Publish Dialog="CustomizeDlg" Control="Next" Property="IsWebSelected" Value="No" Order="12"><![CDATA[&F_WEB_APP < 3]]></Publish> 

先安裝,我的所有屬性都根據用戶選擇(預期行爲)被設置,但在變化/修改他們只設置一次(自定義對話框中的第一個加載 - 值與現有狀態匹配,無論用戶更改)!如果用戶進行更改並按下一步或繼續,然後返回並更改選定的功能,然後單擊下一步,沒有任何屬性設置...這裏有什麼錯誤?

的日誌首先安裝(修剪可讀性):

Action 20:34:08: CustomizeDlg. Dialog created 
* user modify features and press next. 
MSI (c) (94:90) [20:34:09:374]: PROPERTY CHANGE: Adding IsDBInstalled property. Its value is 'No'. 
MSI (c) (94:90) [20:34:09:376]: PROPERTY CHANGE: Adding IsWebInstalled property. Its value is 'No'. 
MSI (c) (94:90) [20:34:09:378]: PROPERTY CHANGE: Adding IsDBSelected property. Its value is 'Yes'. 
MSI (c) (94:90) [20:34:09:379]: PROPERTY CHANGE: Adding IsWebSelected property. Its value is 'Yes'. 
Action 20:34:09: NextDlg. Dialog created 
* user press back. 
Action 20:34:09: CustomizeDlg. Dialog created 
* user modify features and press next. 
MSI (c) (94:90) [20:34:12:376]: PROPERTY CHANGE: Modifying IsWebSelected property. Its current value is 'Yes'. Its new value: 'No'. 
Action 20:34:12: NextDlg. Dialog created 
* user press back. 
Action 20:34:13: CustomizeDlg. Dialog created 
* user modify features and press next. 
MSI (c) (94:90) [20:34:15:129]: PROPERTY CHANGE: Modifying IsDBSelected property. Its current value is 'Yes'. Its new value: 'No'. 
Action 20:34:15: NextDlg. Dialog created 
* user press back. 
Action 20:34:15: CustomizeDlg. Dialog created 
* user modify features and press next. 
MSI (c) (94:90) [20:34:18:289]: PROPERTY CHANGE: Modifying IsWebSelected property. Its current value is 'No'. Its new value: 'Yes'. 
Action 20:34:18: NextDlg. Dialog created 

的日誌變化/修改(修剪可讀性):

Action 21:01:41: CustomizeDlg. Dialog created 
* user modify features and press next. 
MSI (c) (6C:1C) [21:01:45:216]: PROPERTY CHANGE: Adding IsDBInstalled property. Its value is 'Yes'. 
MSI (c) (6C:1C) [21:01:45:220]: PROPERTY CHANGE: Adding IsWebInstalled property. Its value is 'Yes'. 
MSI (c) (6C:1C) [21:01:45:223]: PROPERTY CHANGE: Adding IsDBSelected property. Its value is 'No'. 
MSI (c) (6C:1C) [21:01:45:225]: PROPERTY CHANGE: Adding IsWebSelected property. Its value is 'No'. 
Action 21:01:45: NextDlg. Dialog created 
* user press back. 
Action 21:01:45: CustomizeDlg. Dialog created 
* user modify features and press next. 
Action 21:01:48: NextDlg. Dialog created 
* user press back. 
Action 21:01:49: CustomizeDlg. Dialog created 
* user modify features and press next. 
Action 21:01:51: NextDlg. Dialog created 
* user press back. 
Action 21:01:52: CustomizeDlg. Dialog created 
* user modify features and press next. 
Action 21:01:54: NextDlg. Dialog created 

正如你可以看到第二個日誌沒有財產變化記錄,這是我錯過了什麼?

謝謝。

+0

如何在「F_」的屬性被設置?你確定他們正在修改序列中設置? –

+0

@caveman_dick我更新了這個問題,以澄清F_WEB_APP和DATABASE的含義。它們是功能而非屬性。 –

回答

0

經過幾個小時的閱讀,我來到了空手!我找不到任何解決方案。

好消息是我想出了一個解決方案在我自己的(不理想),但它的作品!

每個功能都有幾個鏈接到它的組件,但我至少有一個非條件組件始終與該功能(例如註冊表組件)在放棄獲取功能請求/操作狀態後進行更新,我嘗試了組件請求/操作狀態..是的它被更新。

所以我根據我對組件的請求/動作狀態,而不是功能請求/動作狀態的條件如下:

<!--If one of Database feature required components request state is Local or Source or Default. it means install.--> 
<Publish Dialog="CustomizeDlg" Control="Next" Property="InstallDatabase" Value="1" Order="5"><![CDATA[$CMP_DATABASE_REGISTRY > 2]]></Publish> 
<!--else clear the propery.--> 
<Publish Dialog="CustomizeDlg" Control="Next" Property="InstallDatabase" Order="6"><![CDATA[$CMP_DATABASE_REGISTRY < 3]]></Publish> 

<!--If one of Database feature required components request state is Absent. it means uninstall.--> 
<Publish Dialog="CustomizeDlg" Control="Next" Property="UninstallDatabase" Value="1" Order="7"><![CDATA[$CMP_DATABASE_REGISTRY = 2]]></Publish> 
<!--else clear the property .--> 
<Publish Dialog="CustomizeDlg" Control="Next" Property="UninstallDatabase" Order="8"><![CDATA[$CMP_DATABASE_REGISTRY <> 2]]></Publish> 


<!--If one of WebApp feature required components request state is Local or Source or Default. it means install.--> 
<Publish Dialog="CustomizeDlg" Control="Next" Property="InstallWebApp" Value="1" Order="9"><![CDATA[$CMP_WEB_APP_REGISTRY > 2]]></Publish> 
<!--else clear the propery.--> 
<Publish Dialog="CustomizeDlg" Control="Next" Property="InstallWebApp" Order="10"><![CDATA[$CMP_WEB_APP_REGISTRY < 3]]></Publish> 

<!--If one of WebApp feature required components request state is Absent. it means uninstall.--> 
<Publish Dialog="CustomizeDlg" Control="Next" Property="UninstallWebApp" Value="1" Order="11"><![CDATA[$CMP_WEB_APP_REGISTRY = 2]]></Publish> 
<!--else clear the property .--> 
<Publish Dialog="CustomizeDlg" Control="Next" Property="UninstallWebApp" Order="12"><![CDATA[$CMP_WEB_APP_REGISTRY <> 2]]></Publish> 

注意:如果用戶不需要做任何改變,以選擇樹,功能部件的動作/請求狀態將是未知的= -1。

現在我可以用上面的性質變化測序對話框/修改模式

<!--collect WebApp setting if WebApp to be installed, WebAppDlg will handle where to go next.--> 
<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="WebAppDlg" Order="13"><![CDATA[Installed AND InstallWebApp]]></Publish> 
<!--collect Database setting if WebApp not to be installed and Database to be installed or uninstalled, DatabaseDlg will handle where to go next.--> 
<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="DatabaseDlg" Order="14"><![CDATA[Installed AND NOT InstallWebApp AND (InstallDatabase OR UninstallDatabase)]]></Publish> 
<!--user made no changes go to verify ready dialog.--> 
<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="15"><![CDATA[Installed AND NOT InstallWebApp AND NOT InstallDatabase]]></Publish>