2009-10-29 16 views
54

file WiX sembrano sempre di includere questa linea:Nei file WiX, cosa si intende per Name = "SourceDir"?

<Directory Id="TARGETDIR" Name="SourceDir"> 

Che cosa è "SourceDir"? A cosa serve? Non è un vero nome di directory. È una specie di valore magico?

+1

TARGETDIR è dove si desidera installare, SourceDir è il percorso in cui si trova il pacchetto di installazione in esecuzione: http://msdn.microsoft.com/en-us/library/aa372452(VS.85). aspx –

risposta

79

Da: http://robmensching.com/blog/posts/2010/1/26/StackOverflow-what-does-NameSourceDir-refer-to

Onestamente, è qualcosa che avremmo dovuto nascosto da parte dello sviluppatore, ma non lo fece. Scusate. La verità è che Windows Installer prevede che la struttura della directory sia sempre root in una riga della directory in cui la chiave primaria (Directory/@ Id) è "TARGETDIR" e la colonna DefaultDir (Directory/@ Name) è "SourceDir" .

Durante un'installazione, TARGETDIR imposterà automaticamente l'unità più grande sulla macchina. SourceDir verrà impostato sulla posizione in cui viene eseguito l'MSI. Ora, SourceDir è difficile dopo l'installazione iniziale perché non verrà impostato a meno che non venga chiamata l'azione ResolveSource. Tuttavia, non si desidera richiamare esplicitamente l'azione ResolveSource in quanto è probabile che venga richiesto di fornire il supporto di origine originale (ovvero inserire il CD, per favore).

Quello che dovremmo fare nel set di strumenti WiX è rimuovere la necessità di specificare la coppia TARGETDIR/SourceDir e dire "Qualsiasi elemento della directory che non ha genitore sarà automaticamente associato a TARGETDIR perché è ciò che dice l'SDK di MSI. " Invece, devi farlo da solo ... e alcuni sviluppatori si chiedono cosa significa tutto questo.

20

Dalla documentazione wix.chm, argomento "Procedura: Aggiunta di un file sul Installer":

L'elemento con l'id TARGETDIR è richiesto dal Windows Installer e è la radice di tutti directory strutture per l'installazione

in base alla documentazione MSDN TARGETDIR è

la directory di destinazione principale per l'installazione

Sempre secondo MSDN, SourceDir è

la directory principale che contiene il file CAB sorgente o la struttura dei file di origine del pacchetto di installazione

Quindi la proprietà SourceDir punta a una directory reale: quella in cui si trova il file MSI. È possibile vedere questo nel registro di installazione durante l'installazione con msiexec /lvx* installer.log installer.msi.

Tuttavia, per qualche motivo SourceDir viene completamente ignorato durante la risoluzione di TARGETDIR. TARGETDIR deve essere impostato in modo esplicito (ad es. Sulla riga di comando) oppure viene risolto in ROOTDRIVE. Se ROOTDRIVE non è impostato in modo esplicito, è la radice dell'unità con lo spazio più libero.

Un test rapido mostra che l'installazione di un componente in TARGETDIR pone effettivamente i file nella directory principale dell'unità D: \, anziché nella cartella in cui si trova l'MSI.

+2

Grazie per le informazioni. Sono ancora piuttosto perplesso però. La mia comprensione è che l'attributo Name dovrebbe essere il nome di una directory reale, che "SourceDir" non è. Se lo si interrompe, il compilatore si lamenta di un errore sulla falsariga di "è necessario impostare Nome su SourceDir". –

+11

Ah! i misteri di Wix! Scoprire tutte le sorprese, le incoerenze e le strette di mano segrete è una vera avventura. – Cheeso

Problemi correlati