2012-02-14 30 views
3

我有一個客戶特定文件添加到我的WiX工程這樣的:如何自定義維克斯文件,針對不同的客戶

<Component Id="IMPORT" DiskId="1" Guid="xxxxx"> 
    <File Id="IMPORT" Name="Import.xml" Source="..\..\config_customerA\Import.xml"/> 
</Component> 

文件的其餘部分是爲所有客戶相同。

現在我有一個Wix項目爲每個客戶。項目Wix文件都是一樣的,只有上面的行根據客戶而改變。我不喜歡這個解決方案,因爲所有冗餘和重複(DRY原則......)。

你如何解決這個困境?

很高興使用一個Wix文件,只更改特定客戶文件的鏈接。

回答

4

可能的方法...

1)使此構建問題不是安裝問題。在構建MSI時,將WXS獨立出來,讓構建自動化將正確的XML文件複製到範圍中。

2)使用預處理器語句抽取XML文件的路徑,並將路徑傳遞到構建中,以便WXS在構建時動態指向不同的XML文件。

3)確定XML的「什麼」不同,並使用XML Changes功能在安裝時將基礎XML轉換爲客戶特定的XML。例如,假設XML文件不同,除了某些鍵/值對具有客戶名稱的值。使用處理器語句爲客戶名稱定義變量,並將客戶名稱傳遞到構建中。使用預處理器語句,以便一個屬性獲取客戶名稱。然後使用XmlConfig元素中的屬性將客戶名稱應用於XML文件中的鍵值屬性。

+0

+1。我也喜歡「兩種可能的方法」和3個真正的選項列表;-) – 2012-02-14 19:10:08

+0

大聲笑。你可以爲我編輯你知道的。 :-)有時候我會自由流暢地帶着想法,忘記回頭去清理原來的想法。當我在構建之間擠壓答案時,我很難做額外的工作。 – 2012-02-14 19:18:04

1

一種可能的方法是將XML文件打包爲'鬆散'(而不是嵌入到msi中)。您需要一個單獨的Media元素,並將其與的File元素一起引用。然後,您有一個引用外部文件的單個msi文件,因此您可以自由更改每個客戶的XML文件。

我已經在我的一個項目中完成了這項工作,並且工作正常。這是否適用於您取決於您​​的要求。一個缺點是,這是不是很友好下載,因爲你現在有兩個文件,而不是一個單一的MSI。

+1

如果GPO只能處理1個文件(壓縮的MSI),那麼這對您來說非常重要,它也不是Active Directory GPO友好的, – 2012-02-14 17:35:21