2011-01-06 9 views
10

Unser Produkt verfügt über ein MSI-Installationsprogramm (in WiX geschrieben), das im Grunde einige Dateien in einen Ordner c: \ ourproduct kopiert und einen Windows-Dienst "ourwindowsservice" installiert.Mehrere Instanzen eines MSI mit dynamischem Instanznamen installieren

Wir möchten Unterstützung für mehrere Instanzen des Dienstes hinzufügen, und es sollte möglich sein, sie unabhängig voneinander zu installieren/zu deinstallieren. Ähnlich z.B. Bei SQL Server sollte jede Instanz einen Namen haben, der als Befehlszeilenparameter an die MSI übergeben werden kann.

Beispiel: Beispiel "A" => Kopieren von Dateien auf "c: \ ourproductA", installieren Sie Service als "ourwindowsserviceA" Instanz "B" => Kopieren von Dateien auf "c: \ ourproductB", installieren Sie Service als " ourwindowsserviceB " ...

Irgendeine Idee?

Instance transformation scheint einen vordefinierten und vordefinierten Satz von Instanzen zu erfordern.

Dank

Antwort

9

der Spalte Name der Serviceinstall-Tabelle ist die Formatierte Typ. Dies bedeutet, dass Sie Eigenschaften zur Laufzeit verwenden können, um den Namen zu steuern.

Vor ein paar Jahren schrieb ich einen Blog-Artikel über mehrere Instanzen Installateure. In den Kommentaren fragte jemand nach einer dynamischen Anzahl von Instanzen und ich sprach darüber, was getan werden müsste. Im Grunde müssten Sie eine bootstrapper.exe schreiben, die über eine Benutzeroberfläche verfügt und die Erstellung von Transformationen mit eindeutigen Eigenschaften steuern könnte. Mit C# und WiX/DTF für Ihr MSI Interop ist es durchaus möglich. Ich habe einfach nie das Bedürfnis verspürt, es wirklich zu tun. Ich bin vollkommen zufrieden mit Produkt, Produkt-1 ... Produkt-15 und du bist fertig. ShortCuts müssen von einer benutzerdefinierten Aktion ausgeführt werden, da sie den Formatted-Typ nicht unterstützen, aber INSTALLDIR kann gemorpht werden, und ServiceNames unterstützt Formatted.

+0

Danke, Christopher! Ist dein Blogartikel immer noch online? – Max

+0

http://blog.deployentengineering.com/2006/10/multiple-instance-msis-and.html und http://blog.deployentengineering.com/2008/03/installshield-2009-beta-part-i.html –

+0

+1 zu Chris 'Antwort. BTW, ich war einer von denen, die Fragen zu mehreren Instanzen in den Kommentaren des erwähnten Blogposts gestellt haben. :) Danke nochmal, Chris, das hat mir sehr geholfen! Später habe ich meine eigenen Erfahrungen in diesem Bereich hier geteilt: http://ysdevlog.blogspot.com/2008/12/multiple-instance-installations-and.html. Wenn Sie auch über Upgrades über Patches nachdenken, könnte es für Sie interessant sein, sie bis zum Ende zu lesen und besonders auf den Link zu achten, den ich im letzten Kommentar teile. Viel Glück! –

2

Leider ist der von Ihnen erwähnte Artikel korrekt, Windows Installer unterstützt keine dynamischen Instanzen. Selbst kommerzielle Tools, die mehrere Instanzen unterstützen, müssen die Instanzen von Anfang an definieren. In diesem Fall müssten Sie die Instanzen A, B, C usw. manuell definieren, bevor Sie das Installationsprogramm generieren.

Dies liegt daran, dass ein Produkt unter anderem durch seinen ProductCode identifiziert wird. Daher müssen Sie eine Transformation auf Ihre MSI anwenden, die die Identität ändert. Es ist ziemlich schwierig, Transformationen im laufenden Betrieb zu generieren, da Sie spezielle Tools oder die Windows Installer-API benötigen, die normalerweise nicht auf einem Benutzercomputer gefunden wird.

Wie jedoch Christopher erwähnt, können Sie versuchen, eine dynamische Instanz mithilfe der Installer-Eigenschaften zu simulieren. Diese Eigenschaften können über die Installationsoberfläche oder einen benutzerdefinierten Bootstrapper festgelegt werden.