Ich richte 32- und 64-Bit-Builds in WiX Version 3.7 ein. Die WiX-Dokumentation ist fehlerhaft, um dies ausreichend zu erklären. In der Dokumentation für Package/@Platform
heißt es: "Von diesem Attribut wird abgeraten; -arch-Schalter an der candle.exe-Befehlszeile ", aber es gibt keine Erklärung dafür, was dieses Argument tatsächlich tut (zumindest keine, die ich finden kann). Die "Dokumentation" für den Compiler verdient die Anführungszeichen rund um das Wort "Dokumentation", wie es ist im Grunde ein Stub (anders als die Linker-Dokumentation zum Beispiel). Für die historische Aufzeichnung, hier ist die vollständige Dokumentation des Compilers:
Der Windows Installer-XML-Compiler wird von candle.exe verfügbar gemacht. Kerze ist verantwortlich für die Vorverarbeitung der Eingabe .wxs Dateien in gültig wohlgeformte XML-Dokumente gegen das WiX-Schema wix.xsd. Dann jeder Nachbearbeitete Quelldatei wird in eine Wixobj-Datei kompiliert.
Der Kompilierungsprozess ist relativ unkompliziert. Das WiX-Schema eignet sich für einen einfachen rekursiven Descent-Parser. Der Compiler verarbeitet jedes Element der Reihe nach neue Symbole, berechnet die notwendige Referenzen und generieren die Rohdaten für die .wixobj Datei.
Die Befehlszeilenhilfe bietet ein bisschen, aber nicht genug.
%Vor%In einer verwandten Frage Plattformidentifikation in WiX 3.0 gibt es eine Antwort mit einem kleinen Hinweis darauf, was passieren könnte, aber es ist kaum ausreichend, und ich weiß nicht, ob es genau ist.
-arch
den gleichen Effekt wie das Attribut Package/@Platform
oder mehr? PLATFORM
fest? Gibt es etwas anderes? Package/@Platform
-Attribut die Befehlszeile? Oder umgekehrt? Oder (noch besser) gibt es einen Fehler, wenn eine inkonsistente Plattformdeklaration vorliegt? Einige dieser Fragen haben Antworten, die scheinbar offensichtlich sein sollten, und tatsächlich habe ich etwas gelernt, indem ich nur die Frage geschrieben habe. Aber ich möchte eine definitive Antwort, vorzugsweise (Hinweis) einen Link zu einer aktualisierten und genauen Dokumentationsseite für die Befehlszeile candle
. Ich erwarte, dass ich das bis zu dem Zeitpunkt gelöst habe, an dem jemand antwortet, aber ich würde genauso schnell anderen Leuten die Zeit sparen, die ich damit verbracht habe, dies herauszufinden.
Package/@Platform
-Attribut, aber adressiert das Befehlszeilenargument nicht.
Über diese PLATFORM
Präprozessorvariable. Es ist jetzt anscheinend BUILDARCH
, obwohl du es schwer haben wirst, es aus der Dokumentation zu erfahren.
%Vor%
Die folgenden Codefragmente ermöglichen die Kompilierzeitkonfiguration zwischen 32-Bit- und 64-Bit-Versionen, ohne eine Benutzervariable einzuführen, die die Plattform repräsentiert, sondern die vom System bereitgestellte Benutzervariable. Beide definierten Variablen sind generisch für normale Installationen. Die Mindestversion ist für 64-Bit-Systeme höher. Das Verzeichnis der Basisprogrammdateien unterscheidet zwischen 32- und 64-Bit-Versionen.
%Vor%Verwenden Sie diese Definitionen später in der WiX-Quelle. %Vor%
Teilweise Antworten:
-arch
setzt die Variable sys.BUILDARCH
sowie sys.PLATFORM
eins. -arch
überschreibt automatisch das Attribut Package/@Platform
. Zumindest scheint es, wenn man sich sys.BUILDARCH
anschaut.
Zusätzlich zur Definition der MSI-Architektur (Package / @ Platform) wird ein Standardkomponententabellenwert für das Attribut msidbComponentAttributes64bit im MSI (Win64 in WiX) festgelegt.
IE. Wenn sys.BUILDARCH = x86, dann ist nicht gesetzt, wenn x64 dann gesetzt ist (+256). Dies ist nicht in der WIX.chm erwähnt, die MSI.chm nur über das obige Attribut
erneut iteriertSetzen Sie dieses Attribut auf 'yes', um dies als 64-Bit zu markieren Komponente. Dieses Attribut erleichtert die Installation von Paketen Dazu gehören sowohl 32-Bit- als auch 64-Bit-Komponenten. Wenn dieses Bit nicht ist gesetzt, wird die Komponente als 32-Bit-Komponente registriert. ** Wenn dies ein ist 64-Bit-Komponente, die eine 32-Bit-Komponente ersetzt, setze dieses Bit und weise es zu eine neue GUID im Guid-Attribut.
(Das sagt Ihnen nichts): Wenn Sie BUILDARCH verwenden, müssen Sie nur das Win64 WiX-Attribut erstellen, wenn Sie die Standardwerte überschreiben möchten. Dies ist hilfreich, wenn Sie verschiedene Arch-MSIs aus demselben WiX-Code erstellen. Vorher habe ich eine Umgebungsvariable für ein Win64-Attribut für jede -Komponente verwendet.
Tags und Links wix