2010-10-06 101 views
0

我正在使用包含少量dll的WiX創建一個安裝程序。在原始腳本中首先調用gacutil.exe,然後爲每個dll調用regasm。將此想法轉換爲WiX時遇到問題。下面是安裝到GAC的代碼片段:對於同一個dll,WiX GAC安裝和regasm不起作用

<Component Id="GMAG.Core.Serialization.dll" Directory="_2.2.8.0" Guid="{my_guid}"> <File Id="my.dll" Source="my_src" Assembly=".net" KeyPath="yes" Checksum="yes"/> </Component>

現在的問題是維克斯將如何執行大會註冊?我的問題是:

  1. 我不能在同一個組件中創建另一個<File Id="my.dll" Source="my_src" KeyPath="yes"/>因爲只能有一個keyPath =「yes」屬性/組件。
  2. 我不能在組件級別放置keyPath =「yes」,因爲它會中斷組件引用計數系統。
  3. 如果沒有keyPath =「Yes」,我無法創建<File Id="my.dll" Source="my_src"/>,因爲它會生成編譯錯誤。
  4. 我無法創建一個獨立的組件,因爲兩個組件會嘗試安裝相同的文件。

我知道我不需要使用heat何時調用regasmregsvr32。在組件代碼中:<File Id="my.dll" Source="my_src" KeyPath="yes"/>應該足夠用於註冊。 我使用熱量,現在我卡住了,因爲我還必須進行組裝註冊。

回答

0

Assembly =「.net」會將您的程序集放到GAC中,然後您需要使用註冊表項來註冊COM。如果你對你的程序集運行Heat,它應該生成你需要的代碼片段。

0

這就是我們如何通過維克斯3.5 GAC中註冊DLL:

<Component Id="Level0GAC" Guid="21735A8C-DD0C-4f4e-8AB5-B5BB8C55726B" DiskId='1'> 
        <File Id='Level0' Name='DLLFileName.dll' DiskId='1' KeyPath="yes" 
         Source='DLLFileName.dll' 
         Checksum="yes" Assembly=".net" AssemblyManifest="Level0"> 
        </File> 
</Component> 

事實上,可以設置OT一個的keyPath一個組件內只有一個文件「是」,這就是爲什麼幾個DLL文件,你應該創建幾個組件。