2014-04-04 13 views
5

Quindi, ho un servizio Windows che può avere istanze multiple installate su un singolo server. Il programma di installazione deve essere in grado di aggiornare una singola istanza. Il programma di installazione utilizza Instance Transforms, ma non sono sicuro su come ottenere gli aggiornamenti principali funzionando come vorrei.WiX - Esecuzione di un importante aggiornamento su un'installazione multiistanza

Per un importante aggiornamento per il lavoro, la mia comprensione è che dovrei avere la sostituzione del codice, in modo da istanze vengono definite in questa forma:

<Instance ProductCode="*" 
      UpgradeCode="{SOMEGUID}" 
      ProductName="Instance 1" 
      Id="Instance1"/> 

MSI può essere lanciato per installare una nuova istanza da:

msiexec.exe /i "installer.msi" TRANSFORMS=:Instance1 MSINEWINSTANCE=1 

Tuttavia, dopo una lunga ricerca l'unico modo che ho trovato per eseguire un aggiornamento su un caso specifico è questo formato:

msiexec.exe /i "installer.msi" /n {PRODUCTCODE} REINSTALL=ALL REINSTALLMODE=vamus 

Il problema con questo è se il codice prodotto viene generato automaticamente per gli aggiornamenti principali, quindi non so cosa sia, quindi non posso passare agli argomenti del comando.

C'è un modo per avviare un aggiornamento utilizzando l'UpgradeCode o l'InstanceID dell'istanza o ProductCode? Dal momento che entrambi rimarranno statici. In alternativa, posso lanciare msi senza argomenti, scegliere un'istanza esistente (tramite il registro di controllo) nella finestra di dialogo dell'interfaccia utente e impostare le proprietà appropriate per forzare l'msi in modalità di aggiornamento per quell'istanza?

+0

È possibile trovare questo utile: http://sklyarenko.net/blog/2011/09/14/revisited-multiple-instance/ –

+0

Mi sembra che una volta installata ciascuna istanza, si tratti di un prodotto con un codice prodotto .Se stai facendo un aggiornamento, il tuo nuovo prodotto deve solo eseguire un noioso aggiornamento principale e compilare la sua tabella di aggiornamento con le cose che sostituiranno qualsiasi prodotto precedente che dovrebbe sostituire. Non che io sappia molto sulle istanze, ma hai provato l'approccio convenzionale all'uso delle tabelle di aggiornamento che fanno sì che la tua nuova istanza aggiorni ciascuna delle tue vecchie istanze. Stai dicendo che non è possibile aggiornare singolarmente ciascun prodotto perché tutti condividono lo stesso codice di aggiornamento? Stessa versione? – PhilDW

+0

Solo per farti sapere che puoi ottenere un ** elenco completo ** di ** codici prodotto **, ** codici di aggiornamento ** e ** nomi prodotto ** su un dato computer tramite PowerShell: [** Come può Trovo il codice di aggiornamento per un file MSI installato? **] (https://stackoverflow.com/questions/46637094/how-can-i-find-the-upgrade-code-for-an-installed-msi-file/46637095 # 46637095). –

risposta

1

Ecco quello che ho fatto finora per gestire 3 istanze separate aggiornamento:

<InstanceTransforms Property="Upgrade"> 
    <Instance Id="I01" ProductCode="*" ProductName="Product Instance 1" UpgradeCode="55a25a09-5979-438d-91dd-67755012a288"/> 
    <Instance Id="I02" ProductCode="*" ProductName="Product Instance 2" UpgradeCode="a27eb2e5-9aa8-4d09-b6c0-df717875c310"/> 
    <Instance Id="I03" ProductCode="*" ProductName="Product Instance 3" UpgradeCode="d705720d-3703-4b17-817e-bd51edd9abea"/> 
</InstanceTransforms> 

Mentre la mia proprietà Upgrade è un GUID fisso. Con questo, posso gestire 3 casi con i loro aggiornamenti separatamente utilizzando questa linea -per nuove installazioni, aggiungo MSINEINSTANCE = 1-:

msiexec/i MyProduct.msi MSINEWINSTANCE = 1 Transforms = ": I01"

+0

Questo è più o meno esattamente quello che ho fatto. Non posso dire con certezza se avrebbe funzionato nel momento in cui la domanda è stata aperta, ma il supporto multi-istanza di wix ha fatto molta strada da allora e sicuramente funziona ora. – AndyK

8

Abbastanza sicuro è necessario il codice del prodotto per questo dato che il codice aggiornamento identifica un famiglia di prodotti, e non una sola.

Fuoco fino PowerShell ed eseguire questo comando per ottenere un elenco di prodotti installati con il codice prodotto:

Get-WmiObject -Class win32_product 

Ecco un modo diverso per ottenere il output in un formato tabellare (IdentifyingNumber è ProductCode):

Get-WmiObject Win32_Product | Format-Table IdentifyingNumber, Name, Version 

È inoltre possibile trovare il codice prodotto nella tabella Proprietà della M compilata SI utilizzando Orca (MSI SDK tool):

enter image description here

+0

Vedi anche: http://stackoverflow.com/a/24340339/129130 –

+0

Lo strumento Orca ha fatto per me! – Antebios

Problemi correlati