2009-11-25 22 views
7

. Ho un programma di installazione WiX che deve installare nuovi bit per Interop.FOOBARLib.DLL nel GAC. Il problema è che il numero di versione è lo stesso della vecchia versione e che i nuovi bit non vengono scritti sul GAC in un aggiornamento. Eseguiamo l'azione RemoveExistingProducts dopo l'azione InstallFinalize.Forza il programma di installazione per aggiornare un file in GAC indipendentemente dal numero di versione

Non è possibile spostare l'azione RemoveExistingProducts in precedenza nell'installazione.

Il componente foobar.dll non è il mio componente, quindi non è possibile incrementare la versione della libreria dei tipi (il che farebbe aumentare la versione dell'interop e tutti questi problemi scompariranno).

C'è un modo per forzare il file da aggiornare nel GAC anche se la versione è la stessa? Voglio un comportamento simile a "gacutil.exe/f".

Il componente si presenta come:

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

risposta

1

È possibile rigenerare l'assembly di interoperabilità te stesso e costringerlo a ottenere una versione superiore come questo:

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

Ecco come ho risolto. Richiesto anche il parametro/sysarray. – Mike

-1

Si potrebbe provare ad eseguire un'azione personalizzata per eliminare il file, a destra prima sono installati i componenti. È not recommended to use vbscript for custom actions ma l'esempio seguente dovrebbe ancora illustrare l'idea.

<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

cosa si sta cercando di fare è chiamato un aggiornamento sul posto di un assieme in il GAC. Perché ciò funzioni correttamente, entrambe le librerie di Interop.FOOBARLib.dll devono avere la stessa versione di assembly, ma la dll più recente deve avere una versione di file più alta. L'attributo della versione del file deve essere incluso nella nuova tabella MsiAssemblyName di MSI. Wix non includere questo attributo di default, quindi bisogna aggiungere il seguente parametro al file .wixproj:

<SetMsiAssemblyNameFileVersion>True</SetMsiAssemblyNameFileVersion> 

Consulta anche:

In-place updating using Wix

Problemi correlati