2016-05-12 16 views
1

Ich bin ein MSI-Installer mit WiX bauen. Da das Produkt, das installiert werden soll, eine VC++ - Laufzeit benötigt, habe ich die zwei Optionen gefunden, die (a) das entsprechende Merge-Modul verwenden und (b) burn verwenden, um vcredist vor dem eigentlichen Produkt-MSI auszuführen. Um zwischen diesen beiden Optionen zu unterscheiden, habe ich einige Fragen, zu denen ich die Informationen nicht gefunden habe.WiX - VC++ Runtime - Vcredist vs Merge-Modul

1) Bei Verwendung des Mergemoduls wird die Runtime nicht separat installiert (kein Eintrag in Programme hinzufügen und entfernen), aber soweit ich weiß, werden nur die erforderlichen Dateien an die entsprechenden Speicherorte kopiert.

1.1) Wenn bereits eine Installation von vcredist auf dem System vorhanden ist, nehme ich an, dass das Mergemodul während der Installation des Produkts nichts tut.

1.2) Wenn eine vcredist-Installation vorhanden war, wie in 1.1 erwähnt, was passiert, wenn der Benutzer diese Laufzeit nur durch Hinzufügen und Entfernen von Programmen deinstalliert? Ich nehme an, das Produkt funktioniert nicht mehr (zumindest bis eine Reparatur-Installation durchgeführt wird, die die Merge-Modul Sachen im MSI wieder die erforderlichen Dateien hinzufügen?)

1.3) Wenn der vcredist noch nicht installiert war und die MSI Installer kopiert die Dateien auf das System und danach ruft ein anderes Installationsprogramm oder der Benutzer die vcredist.exe auf, was passiert dann? Gibt vcredist an, dass die Laufzeitumgebung bereits installiert ist?

1.4) Wenn das Produkt deinstalliert wird, werden die Dateien in das System kopiert, indem das Mergemodul entfernt wird?

1.5) Wenn die Antwort auf 1.4) Ja (VC++ Runtime-Dateien entfernt): Wenn es zwei verschiedene Produkte auf dem System installiert sind beide mit dem gleichen Merge-Modul intern und eines der beiden Produkte wird deinstalliert, was passiert die installierten Laufzeitdateien? Werden sie entfernt und das andere Produkt funktioniert aufgrund der fehlenden Laufzeitdateien nicht mehr?

Vielen Dank im Voraus für Ihre Hilfe und Informationen.

Grüße, Gunnar

Antwort

4

Ein Merge-Modul ist nur eine konsistente Art und Weise (in der Regel gemeinsam) zu installieren, Dateien richtig, indem sie in einem Build enthält. In Analogie dazu erstellen die C++ - Compiler OBJ-Dateien, die zu einer EXE zusammengefasst werden, aber Sie können nicht mehr davon sprechen, dass ein OBJ eine separate Existenz hat, nachdem die EXE erstellt und ausgeführt wurde. Das Gleiche gilt für Mergemodule. Sobald sie in der MSI sind, sind sie nur zu installierende Dateien, und sie folgen den Standardregeln. Wenn eine Datei bereits installiert ist (am freigegebenen Speicherort), wird sie überschrieben, wenn die eingehende Version höher als die bereits installierte Version ist. Die enthaltene Komponente wird um eins hochgezählt, und die Deinstallation anderer Produkte (einschließlich der VC-Redist) unter Verwendung der Komponente wird rückwärts gezählt, so dass alle Produkte, die die Datei verwenden, nicht zerbrechen - es gibt noch eine Version für sie. Dies ist nur die standardmäßige Freigabemethode für Dateien, die zwischen Produkten geteilt werden, und es macht keinen Unterschied, dass ein Produkt ein VC-Redist ist und der andere Ihr MSI ist. Es könnte ebenso einfach sein, dass mehrere Ihrer Produkte die Dateien mithilfe von Mergemodulen installieren und beide können deinstalliert werden, ohne dass die anderen aufgrund der Ref-Zählung und der Tatsache, dass der gemeinsame Standort und die gemeinsame Komponenten-ID die Freigabe wie gewünscht funktionieren lassen. Vergessen Sie also nicht, dass ein Produkt der VC-Redist ist und der andere Ihrer ist (oder ein anderer, der die gleichen Dateien verwendet) - es ist alles nur der gemeinsam genutzte Datei-/Ref-Zählmechanismus von Windows Installer.

Dies ist für die letzten Merge-Module, die die Dateien in den Systemordner installieren. Es gab andere Schemata, die WinSxS und Richtlinienweiterleitungen verwenden, die jetzt anscheinend nicht verwendet werden (VS 2015).

+0

Danke für die Klarstellung.Ich war nur ein wenig verwirrt in Bezug auf Mergemodul Verwendung, wie ich mehrere Beiträge und Beschreibung, die bevorzugen und empfehlen Burn mit vcredist.exe und das Produkt installiert durch Verkettung diese über Merge-Modul-Verwendung, ohne einen verständlichen Grund, warum nicht merge-Module verwenden zu empfehlen. Da der Bootstrapper immer exe-Dateien anstelle von msi-Dateien erzeugt (letzteres ist die bevorzugte Art, Installer in meiner Firma zu verteilen), fragte ich mich, ob es eine Notwendigkeit gibt, die Verkettung von vcredist.exe anstelle von MM vorzuziehen, was nicht scheint um so zu sein. – Gunnar