2012-01-02 30 views
0

我使用下面的代碼,如何根據WIX中的條件跳過子目錄?

<Directory Id="dir2" Name="Folder"> 
    <Component Id="comp_one" Guid="{0D827414-5629-48A0-9DC1-9344C5C6EBFC}"> 
     <Condition>INSTALLSAMPLES</Condition> 
     <File Id="file_one" Source="..\..\..\fileone.exe" /> 
    </Component> 
</Directory> 

上面的代碼,如果條件假做工精細,跳過Folder

但是在下面的代碼中,如果Condition爲假,則會創建FolderSubFolder。有沒有解決方案可以跳過基於條件的目錄?

<Directory Id="dir1" DiskId="3" Name="Folder"> 
    <Directory Id="dir2" Name="SubFolder"> 
     <Component Id="comp_one" Guid="{0D827414-5629-48A0-9DC1-9344C5C6EBFC}"> 
     <Condition>INSTALLSAMPLES</Condition> 
     <File Id="file_one" Source="..\..\..\fileone.exe" /> 
     </Component> 
    </Directory> 
</Directory> 

請幫我解決問題。

回答

2

從廣泛的經驗來看,我建議組件條件不能很好地擴展。它們的確適用於VersionNT和Not VersionNT等,您可能需要在Win 9X上安裝一個DLL/EXE,並在NT/2K/XP等平臺上安裝另一個互斥文件。

相反,您應該將這些組件關聯到某個功能,並讓用戶使用「自定義設置」對話框啓用/禁用該功能。使用Feature Conditions和/或AddLocal/Remove控制事件可以實現更復雜的抽象。

您使用名爲INSTALLSAMPLES的屬性的事實告訴我您應該有一個名爲SAMPLES的功能。

0

其目標文件夾是MSI組件的「身份」的一部分。沒有辦法有條件地在單個目標文件夾中「漂浮」單個組件。但是,您始終可以定義多個組件,每個組件都定位到不同的文件夾,但是源自同一個文件,並有條件地安裝一個或另一個(或兩個!)。

但是Painter先生知道他在說什麼(幾乎所有的安裝問題)。最佳做法是調整功能(組件集合),而不是直接調整組件。