2010-09-16 55 views
4

我是Wix的新手,并创建一个多功能Wix项目。我们的产品有4个模块,每个模块都必须作为Windows安装程序中的一项功能。但所有功能都共享相同的文件夹结构。WIX:加热重复ID问题与多个功能/文件夹

我正在使用命令行来构建我的Wix项目。在收集每个模块到不同的wxs片段后,light.exe给出错误,说明dirercoty表中存在重复的id。

我的文件树的样子......

 
    ModuleA - Core 
|--bin 
|--etc 
| |--mgr 
|--lib 
|-- a.txt 

ModuleB 
|--bin 
|--etc 
| |--mgr 
|--lib 
|-- b.txt 

ModuleC 
|--bin 
|--etc 
| |--mgr 
|--lib 
|-- c.txt 

我使用下面的命令......

 
@echo Harvesting target files.... 
heat.exe dir .\Mod1 -cg Mod1ComponentGroup -nologo -gg -scom -sfrag -sreg -srd -ke -dr INSTALLLOCATION -var var.mod1files -out Mod1Files.wxs 

heat.exe dir .\Mod2 -cg Mod2ComponentGroup -nologo -gg -scom -sfrag -sreg -srd -ke -dr INSTALLLOCATION -var var.mod2files -out Mod2Files.wxs 

heat.exe dir .\Mod3 -cg Mod3ComponentGroup -nologo -gg -scom -sfrag -sreg -srd -ke -dr INSTALLLOCATION -var var.mod3files -out Mod3Files.wxs 

@echo Compile modules.... 
candle.exe -nologo myproj.wxs Mod1Files.wxs Mod2Files.wxs Mod3Files.wxs -dmod1files =.\Mod1 -dmod2files=.\Mod2 -dmod3files=.\Mod3 

@Creating MSI... 
set msi_name=MYProduct.1.0.12345.Win32.msi 

light.exe -nologo -ext WixUIExtension -cultures:en-us myproj.wixobj Mod1Files.wixobj Mod2Files.wixobj Mod3Files.wixobj -o %msi_name% 

有什么办法,以避免重复ID错误?

任何帮助将非常感激。

在此先感谢。

MUTHU

回答

4

如果您正在使用合并模块这将是确定的,因为每个ID将具有独特的模块ID被追加。 (dir1.GUIDA,dir1.GUIDB,dir1.GUIDC)如果您使用的是片段,您必须更改ID或将目录结构规范化为单个wxs,并使用DirectoryRef将它与您的组件一起拉入其他wxs。

我不确定Heat能自动处理所有这些。这实际上只是一个起点。

+0

非常感谢克里斯托弗。这可能是我的一个起点。我将开始研究合并模块。 – Muthukkumaran 2010-09-18 14:04:30

+0

也请看看iswix.codeplex.com。它对合并模块的散列和排序wxs文件做了很好的工作。 (免责声明:我的项目) – 2010-09-18 14:41:53

+0

使用合并模块为我无缝工作。再次感谢您的评论。 – Muthukkumaran 2010-09-20 21:03:37

0

我也有问题,我将生成多个组件组,这些组件组将基于最终位于相同目标安装文件夹中的文件夹生成多个组件组。

如果你已经安装了cygwin来使用unix工具,我所做的消除这些重复的ID的方法是在每个heat.exe命令行后面使用“sed”为所有id添加前缀。我只是将这些sed命令添加到WIX预构建步骤中,就像加热一样。

例如:

SED -i的/目录\编号= \ “/目录\ ID为\” MOD1/G' “generatedfile.wxs”

此命令行将取代所有(目录(Directory Id =“mod1 ...”)

它工作的很好,因为这些目录没有被引用,只是包含在组件中,然后在组中引用。

希望有帮助

+0

非常感谢。但我没有安装CygWin。 – Muthukkumaran 2010-10-07 15:22:40