如何为不同的客户定制WiX文件

时间:2012-02-14 12:17:25

标签: visual-studio-2010 wix

我的 WiX项目中添加了一个客户特定文件

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

文件的其余部分对所有客户都是相同的。

现在,每个客户都有一个Wix项目。项目Wix文件完全相同,只根据客户更改上述行。我不喜欢这种解决方案,因为所有的冗余和重复(DRY原则......)。

你如何解决这个难题?

最好使用一个Wix文件,只更改指向特定客户文件的链接。

2 个答案:

答案 0 :(得分:4)

三种可能的方法......

1)使这成为构建问题而不是安装程序问题。保留WXS并使构建自动化在构建MSI时将正确的XML文件复制到范围中。

2)使用预处理器语句抽象XML文件的路径,并将路径传递给构建,以便WXS在构建时动态指向不同的XML文件。

3)确定XML的“内容”不同,并使用XML更改功能在安装时将基本XML转换为客户特定的XML。例如,假设XML文件不同,除了一些键/值对具有客户名称的值。使用proprocessor语句为客户名称定义变量,并将客户名称传递给构建。使用预处理程序语句,以便属性获取客户名称。然后使用XmlConfig元素中的属性将客户名称应用于XML文件中的键值属性。

答案 1 :(得分:1)

一种可能的方法是将XML文件打包为“松散”(不在msi中嵌入)。您需要一个单独的Media元素,并使用DiskId元素上的File引用它。然后,您有一个引用外部文件的msi文件,因此您可以随意更改每个客户的XML文件。

我在我的一个项目中完成了这项工作。这是否适合您取决于您​​的要求。一个缺点是这不是非常友好的下载,因为你现在有两个文件而不是一个msi。