2010-09-16 58 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