Was genau bewirkt das Argument '-arch' in der Befehlszeile 'candle'?

8

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.

  • Hat das Argument -arch den gleichen Effekt wie das Attribut Package/@Platform oder mehr?
  • Wirkt sich das Argument auf alles aus, was im Präprozessor verfügbar ist? Legt sie insbesondere die% pre_processor-Variable PLATFORM fest? Gibt es etwas anderes?
  • Was ist eine Architektur "Standard"? Überschreibt ein explizites 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.

Eine weitere verwandte Frage, WIX: Ist das Platform-Attribut des Paketelements wirklich veraltet? , spricht über das 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%     
eh9 15.05.2013, 15:16
quelle

3 Antworten

7

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%     
eh9 17.05.2013 16:12
quelle
2

Teilweise Antworten:

  • Das Argument -arch setzt die Variable sys.BUILDARCH sowie sys.PLATFORM eins.
  • Das Argument -arch überschreibt automatisch das Attribut Package/@Platform . Zumindest scheint es, wenn man sich sys.BUILDARCH anschaut.
    • Die Befehlszeilenhilfe ist also falsch. Es ist ein Override, kein Standard.
eh9 16.05.2013 16:56
quelle
0

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 iteriert
  

Setzen 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.

    
Matthew O'Connell 06.07.2015 15:37
quelle

Tags und Links