2009-11-25 4 views
7

Mam instalatora WiX, który musi zainstalować nowe bity dla Interop.FOOBARLib.DLL na GAC. Problem polega na tym, że numer wersji jest taki sam jak w starej wersji, a nowe bity nie są zapisywane w GAC podczas aktualizacji. Po akcji InstallFinalize wykonujemy akcję RemoveExistingProducts.Wymuszenie instalatora, aby zaktualizować plik w GAC niezależnie od numeru wersji

Nie możemy przenieść akcji RemoveExistingProducts na wcześniejszą instalację.

Komponent foobar.dll nie jest moim składnikiem, więc nie mogę zwiększyć wersji biblioteki typów (co spowodowałoby wzrost wersji interopu i wszystkie te problemy znikną).

Czy istnieje sposób na wymuszenie uaktualnienia pliku w GAC, nawet jeśli wersja jest taka sama? Chcę zachowanie podobne do "gacutil.exe/f".

Komponent wygląda następująco:

<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> 

Odpowiedz

1

można zregenerować zestawu międzyoperacyjnego siebie i zmusić go, aby uzyskać większą wersję takiego:

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

To jak mam rozwiązać go. Wymagany również parametr/sysarray. – Mike

-1

Można spróbować wykonać akcję niestandardową, aby usunąć plik, tuż zanim zostaną zainstalowane komponenty. Jest to not recommended to use vbscript for custom actions, ale poniższy przykład powinien jeszcze zilustrować ten pomysł.

<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

Co ty próbujesz zrobić jest nazywany w miejscu aktualizacja złożeniu w GAC. Aby to działało poprawnie, obie biblioteki Interop.FOOBARLib.dll muszą mieć tę samą wersję zestawu, ale nowsza biblioteka dll musi mieć wyższą wersję pliku. Atrybut wersji pliku musi znajdować się w tabeli MsiAssemblyName nowego MSI. Wix nie obejmuje tego atrybutu domyślnie, więc trzeba dodać następujący parametr do pliku .wixproj:

<SetMsiAssemblyNameFileVersion>True</SetMsiAssemblyNameFileVersion> 

Zobacz także:

In-place updating using Wix

Powiązane problemy