2012-10-22 10 views
9

Um Ihnen einen Hintergrund zu geben - Ich habe einen 4 MSI's, der von unserem Lieferanten kommt und dieser muss zu unseren Firmenservern gehen (wir schauen uns ungefähr 3500 Server an). Ab sofort verwalten meine Kollegen dies mit VBS, PS1-Skripten. Aber das Problem mit dem Skript ist, dass jedes Mal, wenn ein Update kommt, wir uns darum kümmern müssen, das vorhandene Paket zu deinstallieren, bevor wir das neue starten und eine Tonne Hardcoding machen.Wie Verwenden von CustomAction in WIX Bundle?

Ich möchte den gesamten Prozess (mit sehr weniger Hardcoding) automatisieren, indem Sie ein WIX-Skript einrichten, um alle 4 MSIs zusammen zu packen. Ich habe über das WIX-Paket gelesen und daraus ein einzelnes MSI erstellt. Aber jetzt gibt es viele Variablen, die an die 4 MSIs übergeben werden. Daher habe ich überlegt, benutzerdefinierte Aktionen zu verwenden, um diese Variablen auf der Grundlage der Umgebung/Maschine festzulegen, auf der MSI ausgeführt wird. Aber kann ich keine benutzerdefinierte Aktion zum Arbeiten machen? Fehle ich etwas?

Ein bisschen googeln und ich sah etwas wie es keine CustomActions in Bundle gibt? kann jemand bestätigen?

Auch wenn es keine CAs gibt, was sind meine Optionen? Wie kann ich die Variablen manipulieren, die an die 4 MSIs weitergegeben werden? Die meisten von ihnen müssen basierend auf dem Computer eingestellt werden, der gerade ausgeführt wird (wie Installationspfad, Benutzer-IDs, App-Pool-IDs usw.).

Antwort

4

Wie ich es sehe, Sie haben drei Möglichkeiten:

  1. Abhängig davon, welche Informationen die Sie benötigen, können Sie die WixUtilExtension verwenden einfache Aufgaben wie Registry-Schlüssel zu lesen und die Suche nach Dateien durchführen, denen Sie Übergeben Sie dann die Ergebnisse als Eigenschaften an Ihre Installationspakete.

  2. Implementieren Sie benutzerdefinierte Aktionen in den einzelnen Installationspaketen selbst (nicht im Bundle).

  3. Schreiben Sie Ihre eigene benutzerdefinierte Bootstrapper-Anwendung, um alle Eigenschaften festzulegen, die Sie festlegen müssen, und geben Sie sie dann an Ihre Installationspakete weiter. Dies ist komplexer als die # 1 und # 2, aber wenn Ihr Interesse der folgenden Links sollten Sie begonnen erhalten: introducing managed bootstrapper applications und write a wpf wix installer

+0

Sinn macht! Ich habe alles versucht, um die CA im Bundle laufen zu lassen und es wird einfach nicht aufgerufen. Von dem, was ich verstehe, obwohl das WIX-Bundle eine MSI-Datei generiert, ist es nicht wirklich eine MSI (Sie können es nicht mit MSiexec ausführen oder öffnen Sie es mit ORCA). Es ist nur eine exe oder ein Programm, das alle MSIs zusammenbringt und es hat keine Eigenschaften eines MSI. P.S: Ich denke nur um es verwirrend zu machen MS benannte es als MSI :) – Isaiah4110

+0

@ user1766402, hatte ich nicht einmal bemerkt, dass es möglich war, das Bündel als msi auszugeben, bis ich deine Frage gelesen habe. Sie können mit der rechten Maustaste auf das Projekt im Visual Studio klicken und Eigenschaften auswählen und die Ausgabe in .exe ändern. Das sollte der Standard für Bundle/Bootstrapper-Projekte sein. – BryanJ

+3

Ein WiX-Bundle ist kein MSI, es ist eine ausführbare Datei. Das Umbenennen der .exe in .msi wird das nicht ändern. :) –

9

Es gibt eine vierte Option ist, ein nützliches leichtes Hack, die von Vijay Kotecha (siehe http://vijayskotecha.blogspot.com/2013/07/wix-bootstrapper-custom-action.html), ...

Erstellen Sie im Wesentlichen eine <ExePackage> um eine Durchgangsdatei .bat oder .cmd Batch-Datei. Die Stapel-/Befehlsdatei enthält die einzelne Zeile '%*', die alle Befehlszeilenargumente als Befehl der ersten Klasse erneut ausführt.

So:

<ExePackage ... SourceFile="SourcePath\WixCustomAction.cmd" 
    InstallCommand="my_custom_action.exe my_custom_parameters" /> 
<ExePackage ... SourceFile="SourcePath\WixCustomAction.cmd" 
    InstallCommand="my_next_action.exe my_next_parameters" /> 

Wo WixCustomAction.cmd eine Datei nur enthalten ist '%*'.

Diese <ExePackages> können nacheinander in die <Bundle><Chain> nach Bedarf mit verschiedenen InstallCommand s je nach Bedarf platziert werden.

Verwandte Themen