2014-04-04 8 views
5

So habe ich einen Windows-Dienst, der mehrere Instanzen auf einem einzigen Server installiert haben kann. Das Installationsprogramm muss in der Lage sein, eine einzelne Instanz zu aktualisieren. Das Installationsprogramm verwendet Instance Transforms, aber ich bin mir nicht sicher, wie wichtige Upgrades funktionieren, wie ich es möchte.WiX - Durchführen einer größeren Aktualisierung bei einer Installation mit mehreren Instanzen

Für ein wichtiges Upgrade für Arbeit, mein Verständnis ist, dass ich den Produktcode ändern sollte, so Instanzen in dieser Form definiert sind:

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

Die msi eine neue Instanz zu installieren, indem gestartet werden können:

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

Doch nach viel der einzige Weg, die Suche ich gefunden habe, ein Upgrade auf eine bestimmte Instanz laufen ist dieses Format:

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

Das Problem dabei ist, wenn der Produktcode automatisch für größere Upgrades generiert wird, dann weiß ich nicht, was es ist, so kann ich nicht auf die Befehlsargumente übergeben.

Gibt es eine Möglichkeit, ein Upgrade mit dem UpgradeCode oder InstanceID der Instanz statt des ProductCode zu starten? Da beide bleiben statisch. Alternativ kann ich die MSI ohne Argumente starten, eine vorhandene Instanz (über die Registrierungsprüfung) im UI-Dialogfeld auswählen und entsprechende Eigenschaften festlegen, um die msi in den Upgrade-Modus für diese Instanz zu zwingen?

+0

Sie könnten dies hilfreich finden: http://sklyarenko.net/blog/2011/09/14/revisited-multiple-instance/ –

+0

Es scheint mir, dass, sobald jede der Instanzen installiert ist, es ein Produkt mit einem Produktcode ist .Wenn Sie ein Upgrade durchführen, muss Ihr neues Produkt nur ein langwieriges Haupt-Upgrade durchführen und seine Aktualisierungstabelle mit dem Material füllen, das das vorherige Produkt ersetzt, das es ersetzen sollte. Nicht, dass ich viel über Instanzen weiß, aber Sie haben den herkömmlichen Ansatz der Verwendung von Aktualisierungstabellen ausprobiert, die Ihre neue Instanz veranlassen, Ihre alten Instanzen zu aktualisieren. Sagen Sie, dass Sie nicht jedes Produkt einzeln aktualisieren können, weil sie alle den gleichen Upgradecode haben? Gleiche Version? – PhilDW

+0

Nur um Sie wissen zu lassen, dass Sie eine ** vollständige Liste ** von ** Produktcodes **, ** Upgrade-Codes ** und ** Produktnamen ** auf einem bestimmten Computer über PowerShell erhalten können: [** Wie kann Ich finde den Upgrade-Code für eine installierte MSI-Datei? **] (https://stackoverflow.com/questions/46637094/how-can-i-find-the-upgrade-code-for-an-installed-msi-file/46637095 # 46637095). –

Antwort

1

Hier ist, was ich bisher getan haben 3 separate Instanzen Upgrade zu handhaben:

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

Während mein Eigentum-Upgrade eine feste Guid ist. Damit kann ich umgehen 3 Instanzen mit ihren Updates separat diese Zeile -für Neuinstallationen verwenden, fügen Sie MSINEINSTANCE = 1:

msiexec/i myproduct.msi MSINEWINSTANCE = 1 TRANSFORMS = ": I01"

+0

Das ist mehr oder weniger genau das, was ich getan habe. Ich kann nicht mit Sicherheit sagen, ob es zum Zeitpunkt der Eröffnung der Frage funktioniert hätte, aber wix multi instance support hat seither einen langen Weg hinter sich und es funktioniert sicherlich jetzt. – AndyK

8

Ziemlich sicher, benötigen Sie den Code Produkt hierfür seit dem Upgrade-Code identifiziert eine Produktfamilie, und nicht ein einziger.

Feuer up Powershell und diesen Befehl ausführen, eine Liste von installierten Produkten mit Produktcode zu erhalten:

Get-WmiObject -Class win32_product 

Hier ist eine andere Art, die Ausgabe in tabellarischer Form (IdentifyingNumber zu bekommen (Produktcode):

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

Sie können den Produktcode auch in der Eigenschaftentabelle des kompilierten M finden SI mit Orca (MSI SDK tool):

enter image description here

+0

Siehe auch: http://StackOverflow.com/a/24340339/129130 –

+0

Das Orca-Tool hat es für mich gemacht! – Antebios

Verwandte Themen