WIX:使用多个功能/文件夹加热重复ID问题

时间:2010-09-16 19:54:52

标签: visual-studio-2008 wix wix3

我是Wix的新手并创建了一个多功能Wix项目。我们的产品有4个模块,每个模块都必须作为Windows安装程序中的一项功能包含在内。但是所有功能都共享相同的文件夹结构。

我正在使用命令行来构建我的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

2 个答案:

答案 0 :(得分:4)

如果您使用的是合并模块,这样就可以,因为每个ID都会附加一个唯一的模块ID。 (dir1.GUIDA,dir1.GUIDB,dir1.GUIDC)如果您正在使用片段,则必须更改ID或将目录结构规范化为单个wxs,并使用DirectoryRef将其与您的组件一起提取到其他wx中。 / p>

我不确定Heat能否自动处理所有这些问题。这真的只是一个起点。

答案 1 :(得分:0)

我还遇到了一个问题,即我会根据最终位于相同目标安装文件夹中的文件夹生成多个组件组。

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

例如:

sed -i's / Directory \ Id = \“/ Directory \ Id \”mod1 / g'“generatedfile.wxs”

此命令行将替换所有(Directory Id =“...”)(Directory Id =“mod1 ...”)

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

希望有所帮助