Sto configurando versioni a 32 e 64 bit in WiX versione 3.7. La documentazione di WiX è difettosa nel spiegarlo adeguatamente. Nello documentation for Package/@Platform
, si dice "L'uso di questo attributo è sconsigliato, invece, specificare l'opzione -arch alla riga di comando candle.exe", ma non c'è alcuna spiegazione di ciò che effettivamente fa questo argomento (almeno nessuno che io possa individuare). Lo "documentation" for the compiler merita completamente le virgolette d'aria intorno alla parola "documentazione", in quanto è fondamentalmente uno stub (a differenza dello linker documentation, ad esempio). Per il record storico, ecco la documentazione completa del compilatore:Che cosa fa esattamente l'argomento `-arch` sulla riga di comando` candle`?
Il compilatore XML di Windows Installer è esposto da candle.exe. La candela è responsabile della preelaborazione dei file .wxs di input in documenti XML ben formati contro lo schema WiX, wix.xsd. Quindi, ogni file sorgente post-elaborato viene compilato in un file .wixobj.
Il processo di compilazione è relativamente semplice. Lo schema WiX si presta a un semplice parser di discesa ricorsivo. Il compilatore elabora ogni elemento a sua volta creando nuovi simboli, calcolando i riferimenti necessari e generando i dati non elaborati per il file .wixobj.
L'aiuto della riga di comando offre un po ', ma non abbastanza.
-arch set architecture defaults for package, components, etc.
values: x86, x64, or ia64 (default: x86)
In una questione connessa, Platform identification in WiX 3.0, c'è one answer with a sliver of hint su ciò che potrebbe essere in corso, ma non è certo sufficiente, e non so se è preciso.
- Condivide la tesi
-arch
hanno lo stesso effetto di impostare l'attributoPackage/@Platform
, o lo fa fare di più? - L'argomento influisce su qualsiasi elemento disponibile nello preprocessor? In particolare, imposta la variabile del preprocessore
PLATFORM
? Imposta qualcos'altro? - Che cos'è un'architettura "predefinita"? Un attributo esplicito
Package/@Platform
sostituisce la riga di comando? O vice versa? O (meglio ancora) c'è un errore se c'è una dichiarazione di piattaforma incoerente?
Alcune di queste domande hanno risposte che sembrano dover essere ovvie, e infatti ho imparato qualcosa semplicemente scrivendo la domanda. Ma mi piacerebbe una risposta definitiva, preferibilmente (suggerimento) un link a una pagina di documentazione aggiornata e accurata per la riga di comando candle
. Mi aspetto di averlo risolto nel momento in cui qualcuno risponde, tuttavia, risparmierò presto ad altre persone il tempo che avrò speso per capirlo.
Un'altra domanda correlata, WIX: is the Platform attribute of the Package element truly deprecated?, parla dell'attributo
Package/@Platform
, ma non indirizza l'argomento della riga di comando.
Informazioni su quella variabile del preprocessore
PLATFORM
. Ora è apparentemente
BUILDARCH
, anche se è difficile comprenderlo dalla documentazione.
warning CNDL1034 : The built-in preprocessor variable '$(sys.PLATFORM)' is
deprecated. Please correct your authoring to use the new '$(sys.BUILDARCH)'
preprocessor variable instead.
Come si imposta l'opzione '-arch' su x64 se si sta creando il programma di installazione WiX in Visual Studio? – Jammer
@Jammer L'opzione '-arch' è impostata sulla riga di comando di' candle' dopo che è stata compilata; non è coinvolto nella creazione di quel compilatore. Se stai chiedendo se c'è un modo per rendere '-arch x64' il valore predefinito per un tale binario, non conosco la risposta in modo casuale. – eh9
Ah, l'ho risolto. Se si imposta la proprietà 'PlatformInstaller' su x64 nel proprio file' .wixproj', la riga di comando a candle includerà l'opzione -arch x64. – Jammer