2009-11-25 47 views
7

我有一個WiX安裝程序,它需要爲Interop.FOOBARLib.DLL安裝新的位到GAC。問題在於版本號與舊版本相同,新版本在升級時未寫入GAC。我們在InstallFinalize操作之後執行RemoveExistingProducts操作。強制安裝程序升級GAC中的文件,而不管版本號如何

我們無法將RemoveExistingProducts操作移至安裝中的較早版本。

foobar.dll組件不是我的組件,所以我不能增加類型庫版本(這會導致interop版本增加,所有這些問題消失)。

即使版本相同,是否有辦法在GAC中強制升級文件?我需要類似於「gacutil.exe/f」的行爲。

組件的樣子:

<Component Id="Interop.FOOBARLib.dll" Guid="{4E0C173E-34DF-4249-A3A6-5530047FA65B}" > 
    <File Id="Interop. FOOBARLib.dll" Name="Interop.FOOBARLib.dll" KeyPath="yes" Assembly=".net"/> 
</Component> 

回答

1

您可以自己重新生成interop程序集,並迫使它獲得更高的版本是這樣的:

tlbimp /asmversion:1.2.3 /out:Interop.FOOBARLib.DLL foobar.dll 
+0

這是我如何解決它。還需要/ sysarray參數。 – Mike 2010-09-15 18:39:40

-1

你可以嘗試執行自定義操作來刪除文件,安裝的組件權利之前。這是not recommended to use vbscript for custom actions,但下面的例子應該仍然說明這個想法。

<CustomAction Id="ForceRemove" Script="vbscript" Execute="deferred"> 
    <![CDATA[ 
    Dim fso 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    fso.DeleteFile("c:\somefile.dll") 
    ]]> 
</CustomAction> 

<InstallExecuteSequence> 
    <Custom Action='ForceRemove' Before='InstallFiles'/> 
</InstallExecuteSequence> 
8

你正在試圖做的,什麼叫在大會的現場更新GAC。爲了正常工作,Interop.FOOBARLib.dll庫必須具有相同的程序集版本,但較新的dll必須具有較高的文件版本。文件版本屬性必須包含在新的MSI的MsiAssemblyName表中。維克斯不包括在默認情況下此屬性,所以你必須將以下參數添加到您的.wixproj文件:

<SetMsiAssemblyNameFileVersion>True</SetMsiAssemblyNameFileVersion> 

參見:

In-place updating using Wix

相關問題