Frage

Wann sollte ich ändern oder nicht ändern meine Komponenten-GUID in WIX? Microsoft SDK-Informationen ist verwirrend.

Glytzhkof Bearbeiten:Um zu klären, die Frage befasst sich mit, wenn eine Komponente GUID geändert werden sollte, für die eine MSI-Komponente.Eine Komponente kann ändern mit Aspekten wie:geändert Zielpfad, hinzufügen oder entfernen von Dateien in/aus der gleichen Komponente, die neben der Registrierungs-Daten etc...Dies führt zu Problemen mit Bezug auf die so genannte Komponente referenzieren, ich.e best practice für die Erstellung von Komponenten im MSI.

War es hilfreich?

Lösung

Das Gesamtkonzept von MSI ist, dass es eine 1:1 mapping zwischen ein Komponenten-GUID (eindeutige Kennung) und ein absoluter Pfad (Installationsordner / Schlüssel (Pfad).Der vollständige Pfad, einschließlich Dateinamen, wenn alle.Siehe update unten für eine neue Wix-Funktion zum Angebot auto-magisch mit diesem.

Ich benutze einige einfache Regeln zu deal mit die übermäßig komplexe und unsinnig Komponente Regeln:

  • Verwenden Sie immer eine separate Komponente, die pro Datei (auch für non-binaries).Dies vermeidet alle Arten von Problemen.Es gibt ein paar Ausnahmen:
    • Multi-Datei .NET-Assemblys sollte alles werden in eine Komponente, da Sie sollten immer installiert / deinstalliert werden als eine Einheit.
    • Ein paar andere, Allgemeine Dateitypen kommen in "passende Paare" - Sie gehören zusammen.Oft sind diese Inhalte und index-Dateien.Als Beispiel betrachten wir die Microsoft-Hilfe-Dateien:
      • .HLP-und .CNT-Dateien gehören zusammen.
      • .CHM-und .CHI-Dateien gehören zusammen.
    • Es gibt wahrscheinlich mehrere Datei-Typen, die zusammen gehören und sollten daher in der gleichen Komponente, so dass Sie installieren/deinstallieren zusammen - ich vermute bestimmten Zertifikats-Dateien werden die Kandidaten.Es ist schwer, eine definitive Liste.Fragen Sie einfach selbst "diese Dateien gehören immer zusammen" - damit Sie immer in Paaren, Wann immer es eine neue version gibt?Wenn ja, dann installieren Sie Sie über die gleiche Komponente.Legen Sie die Datei unter Versionskontrolle, wenn überhaupt, als Schlüssel-Datei.
    • Ich will hinzufügen - Treiber-Dateien als Beispiel für eine Reihe von Dateien immer gehören zusammen: SampleDriver.cat, SampleDriver.inf, SampleDriver.sys, SampleDriver.cer.Sie müssen alle passen, als eine "Einheit" für die Bereitstellung.
  • Denken Sie daran, dass, sobald Sie reserviert haben eine GUID für eine Komponente, es ist in Stein gemeißelt, die für diese Komponente ist der Schlüssel Pfad (absolute path).Wenn Sie die Datei verschieben an eine neue Position, oder benennen Sie die Datei, geben Sie eine neue Komponente GUID (da der absolute Pfad ist anders, es ist effektiv eine neue Identität).
  • Zusammenfassend Komponenten-GUIDs sind gebunden an ein absolutes installation Lage, und nicht auf eine bestimmte Datei. Die GUID nicht, befolgen Sie die Datei um, wenn es sich bewegt.Die GUID Referenz zählt eine absolute Position, nicht die Datei, die per se.
  • Tun nicht hinzufügen oder entfernen von Dateien aus einer vorhandenen Komponente.Alle Arten von upgrade-und Patch-Problemen führen.Dies ist der Grund, warum ich wie eine Datei pro Komponente als eine Allgemeine Regel.
  • Es gibt eine Menge mehr zu bieten-Komponente referenzieren, aber ich werde es dabei belassen, dass für einen "überblick".

Einige Beispiele:

  • Benennen Sie die Datei C:\Program Files\MyCompany\MyApp\MyFile.exe zu C:\Program Files\MyCompany\MyApp\MyFile_NEW.exe.Was bedeutet das für die Komponente erstellen?Dies ist ein neuer absoluter Installationspfad, so erzeugen Sie eine neue GUID für die hosting-Komponente, ODER Sie eine neue Komponente hinzufügen, und löschen Sie das alte (was den gleichen Effekt hat).
  • Ihre aktualisierte MSI liefert eine neue version des MyFile.exe.Die Lage ist die gleiche wie zuvor, das heißt die Komponenten-GUID nicht geändert werden sollte.Es ist die gleiche Datei (Identität), nur in einer anderen version.

UPDATE:WIX hat nun eine neue auto-Komponenten-GUID erzeugen feature berechnet ein GUID solange das Ziel-Pfad bleibt der gleiche.Ich habe nicht versucht, diese aus um ehrlich zu sein, aber viele scheinen es zu benutzen, ohne Probleme, und Rob Mensching (Wix Autor) heißt es, es ist sicher für den normalen Gebrauch.Als ein Konzept, empfehle ich dies, da es einige features auto-magic und schützt Sie vor einiger Komplexität.

Beachten Sie auch, dass Sie lassen sich viel-source-Attribute von Ihrem Wix xml-Datei und verlassen Sie sich auf Wix defaults statt Programmierung-Werte.

Andere Tipps

Sie nie die Komponente ändern / @ Guid. Sie ändern sich auch nie die Menge der Ressourcen (Datei, RegistryKey, Shortcut, TypeLib, etc.) in der Komponente. Wenn Sie eine neue Ressource haben, müssen Sie eine neue Komponente mit einem neuen @Guid erstellen. Der wirklich schwierige Teil ist, dass neue Komponente keine Überlappung haben kann (man denke Dateipfad oder Registrierungsschlüssel Pfad oder typelib, etc.) mit der alten Komponente.

Dies sind im Wesentlichen die Komponente Regeln finden Sie unter: http: //robmensching.com/blog/posts/2003/10/18/Component-Rules-101 .

Haben Sie einen Blick auf die WiX Tutorial, die Dateien Innerhalb , für eine ausführliche Erklärung auf der Komponente Regeln. Im Grunde ist es sagt, dass Sie nie die GUID einer Komponente ändern, da das bedeutet, die alte Komponente verwaist und eine neue Komponente zu schaffen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top