2014-10-16 53 views
1

我正在將我的產品與其他庫鏈接起來,試圖更輕鬆地在多個安裝中安裝一組目錄。目的是重用xml代碼,問題在於它們必須安裝在每個客戶需求的根目錄中。如何在UISequence之後防止目錄中的更改

所以我有我的ComponentGroup s在WixLibrary。

我在Wix應用程序中設置了我的目錄。

但在安裝之前CostFinalize之後,目錄被重置爲其默認值,而不是由用戶在對話框序列中選擇的值。

有沒有辦法來防止這種情況?

回答

1

好吧,首先第一件事情:

  • 的問題是,經過CostFinalize和所有UI操作我的目錄,其中使用默認值代替。
  • 當我鏈接使用相同全局目錄的兩個不同庫時,問題就開始了。
  • 該文件夾設置在Windows的根文件夾(按客戶要求)中,然後設置爲默認值。然後,我們附上Property就像我們會做的WIXUI_INSTALLDIR,整體而言,我們有以下幾點:對安裝
  • 可安裝在無關的文件,以4 directories庫的特定文件
    • 一個root文件夾即root目錄。
    • 另一個安裝文件並運行腳本到這4個外部directoriesdirectory的庫。該庫是我們安裝的唯一特定庫。

鏈接所有這些都是它自己的問題,它在Product做,在UI,並使用外部庫中指定的PropertyRef。此外,請記住,每一個PathEdit必須被設置爲Indirect="yes",你必須將所有的間接Properties指向你DirectoryUI

要解決這個問題很簡單,Microsoft Installer複查我們的所有文件夾在用戶在安裝過程中設置它們之後,因此我們需要在UI Sequence期間用戶更改之後防止發生任何更改。因此Properties來救援。

這裏有一個例子,在UI設置要在InstallUISequence

<Property Id="SETFOLDERFREEZE">0</Property> 
<CustomAction Id="caSetPreventChanges" Property="SETFOLDERFREEZE" Value="1"/> 

設置然後在凍結文件夾的每個文件夾您Product您鏈接該屬性。

<PropertyRef Id="SETFOLDERFREEZE"/> 
<SetDirectory Id="SPECIFIC_FOLDER" Value="[WindowsVolume]MoreStuff" Sequence="both"> 
    <![CDATA[SETFOLDERFREEZE<>"1"]]> 
</SetDirectory> 
<Property Id="EXTRAFILES_INSTALLDIR" Value="SPECIFIC_FOLDER"/> 

您使用PropertyEXTRAFILES_INSTALLDIR在特定UI該項目,並在您的可重複使用的Library使用SPECIFIC_FOLDER

這是一個爛攤子......但允許重用,並設置了一些簡單的屬性和自定義操作節拍一遍設立文件和文件夾,特別是如果有數百人。