2014-05-21 11 views
9

Ho un'applicazione con MSI inclusa in un bundle WiX insieme a vari strumenti di terze parti necessari. Ho disabilitato le azioni di modifica e riparazione nel file MSI a come funziona l'applicazione, per richiedere la disinstallazione completa prima di installare nuovamente la stessa versione.Come impedire il bundle WiX con lo stesso UpgradeCode/Versione da installare due volte

Quando eseguo l'MSI separatamente, funziona come previsto: il programma di installazione non può essere eseguito due volte. Lo stesso vale quando si esegue di nuovo lo stesso pacchetto. Ma semplicemente ricostruendo il bundle (usando lo stesso UpgradeCode e Version), l'installazione procede invece (molto più velocemente questa volta), e finisco con una voce duplicata tra i programmi installati. Mi piacerebbe davvero impedirlo e far funzionare il pacchetto come MSI.

Ho provato con varie condizioni impostate sul pacchetto; NOT WixBundleInstalled, WixBundleInstalled != 1, ecc. Ma nessuno di questi sembra funzionare.

Per riferimento, ecco la dichiarazione bundle:

<Bundle UpgradeCode="{FAF9CBDD-BE89-4B18-9921-FD5B426B5B0C}" IconSourceFile="$(var.SolutionDir)Resources\product.ico" 
      Name="Product 4.4" Version="4.4.0.0" Manufacturer="My Company" DisableModify="yes" Condition="NOT (WixBundleInstalled = 1)"> 
+1

Conosco un caso in cui questo può verificarsi quando si installa un msi (non un pacchetto): se 2 msi hanno lo stesso codice di aggiornamento ma sono installati in diversi contesti (uno installa per utente e l'altro per macchina), quindi non ci sarà alcun aggiornamento, cioè avrai 2 voci duplicate. – Brainless

+0

Grazie. Tranne il nostro MSI, c'è un MSI esternamente recuperato (pre-costruito) che includiamo nel pacchetto. Ho provato ad aggiungere 'ForcePerMachine =" yes "' a quell'istruzione 'MSIPackage', ma questo non aiuta. –

+0

è il tuo ID prodotto = "*"? – ColacX

risposta

0

Se si aggiunge il tag OptionalUpdateRegistration, si otterrà una voce nel Registro di sistema è possibile utilizzare come un InstallCondition per il vostro pacchetto MSI

<OptionalUpdateRegistration ProductFamily="MyProductFamily" Name="MyAppBundle"/> 

<util:RegistrySearch Id="SearchForMyProduct" 
        Root="HKLM" 
        Key="SOFTWARE\WOW6432NODE\MyCompany\Updates\MyProductFamily\MyAppBundle" 
        Value="PackageVersion" 
        Result="exists" /> 

<MsiPackage Id="MyMsi" 
      InstallCondition=SearchForMyProduct 
      DisplayName="My Wonderful Product" 
      SourceFile="MyProduct.msi" 
      ForcePerMachine="yes"/> 

Ciò impedirà a una nuova versione del bundle di installare nuovamente "MyProduct". Ciò non impedirà al bundle di installarlo dopo averlo già installato dal MSI. Per fare ciò, puoi anche avere un tag RegistrySearch per una chiave creata dal tuo MSI.

+0

Ha migliorato l'installazione di bundle, ma sfortunatamente semplicemente eseguendo di nuovo bundle registra ancora un altro (identico) pacchetto. –

Problemi correlati