2009-10-29 13 views
54

WiX Dateien scheinen immer diese Zeile enthalten:In WiX-Dateien, worauf bezieht sich Name = "SourceDir"?

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

Was ist "SourceDir"? Was wird es verwendet? Es ist kein echter Verzeichnisname. Ist es eine Art magischer Wert?

+1

TARGETDIR ist der Ort, an dem Sie installieren möchten, SourceDir ist der Pfad zu dem sich das Installationspaket befindet, das Sie ausführen: http://msdn.microsoft.com/en-us/library/aa372452(VS.85). aspx –

Antwort

79

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

Ehrlich gesagt, es ist etwas, das wir aus dem Entwickler versteckt haben sollten aber nicht. Es tut uns leid. Tatsache ist, dass der Windows Installer erwartet, dass die Verzeichnisstruktur immer in einer Verzeichniszeile verankert ist, in der der Primärschlüssel (Verzeichnis/@ Id) "TARGETDIR" und die Spalte DefaultDir (Verzeichnis/@ Name) "SourceDir" ist. .

Während einer Installation wird TARGETDIR standardmäßig auf das größte Laufwerk der Maschine gesetzt. SourceDir wird auf den Ort gesetzt, an dem das MSI ausgeführt wird. Nun ist SourceDir nach der Erstinstallation schwierig, da es nicht festgelegt wird, bis die ResolveSource-Aktion aufgerufen wird. Sie möchten jedoch die ResolveSource-Aktion nicht explizit aufrufen, da Sie wahrscheinlich aufgefordert werden, das ursprüngliche Quellmedium bereitzustellen (aka: legen Sie die CD bitte ein).

Was wir im WiX-Toolset hätten tun sollen, ist die Notwendigkeit, das TARGETDIR/SourceDir-Paar anzugeben und zu sagen: "Jedes Directory-Element, das kein Parent hat, wird automatisch an TARGETDIR übergeben, weil das MSI-SDK das sagt. " Stattdessen musst du es selbst machen ... und einige Entwickler fragen sich, was das alles bedeutet.

20

Von der wix.chm Dokumentation in dem Thema "How To: eine Datei auf Ihrem Installer hinzufügen":

Das Element mit der ID TARGETDIR von dem Windows Installer erforderlich ist und ist die Wurzel aller Verzeichnis Strukturen für die Installation

in der Dokumentation MSDN nach TARGETDIR ist

die Wurzel Zielverzeichnis für die Installation

Auch MSDN entsprechend, SourceDir ist

das Root-Verzeichnis, das die Quelle CAB-Datei oder die Quelldatei Baum des Installationspaket enthält

Also die SourceDir-Eigenschaft verweist auf ein echtes Verzeichnis: das, wo Ihre MSI-Datei sitzt. Sie können dies im Installationsprotokoll bei der Installation mit msiexec /lvx* installer.log installer.msi sehen.

Aus irgendeinem Grund wird SourceDir bei der Auflösung von TARGETDIR jedoch vollständig ignoriert. Das TARGETDIR muss entweder explizit (z. B. in der Befehlszeile) festgelegt werden oder es wird in ROOTDRIVE aufgelöst. Wenn ROOTDRIVE nicht explizit festgelegt ist, ist es das Stammverzeichnis des Laufwerks mit dem meisten freien Speicherplatz.

Ein schneller Test zeigt, dass die Installation einer Komponente in TARGETDIR tatsächlich die Dateien im Stammverzeichnis meines Laufwerks D: \ an Stelle des Ordners platziert, in dem sich das MSI befindet.

+2

Danke für die Info. Ich bin jedoch immer noch ziemlich perplex. Nach meinem Verständnis sollte das Name-Attribut der Name eines echten Verzeichnisses sein, was "SourceDir" nicht ist. Wenn Sie es auslassen, beschwert sich der Compiler mit einem Fehler in dem Sinne "Sie müssen Name zu SourceDir festlegen". –

+11

Ah! die Geheimnisse von Wix! Es ist ein wahres Abenteuer, all die Überraschungen, Inkonsistenzen und geheimen Händeschütteln zu entdecken. – Cheeso

Verwandte Themen