69 Stimmen

Worauf bezieht sich Name="SourceDir" in WiX-Dateien?

WiX-Dateien scheinen diese Zeile immer zu enthalten:

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

Was ist "SourceDir"? Wofür wird es verwendet? Es ist kein richtiger Verzeichnisname. Handelt es sich um eine Art magischen Wert?

93voto

Rob Mensching Punkte 31828

Von: https://robmensching.com/blog/posts/2010/1/26/stackoverflow-what-does-namesourcedir-refer-to/

Ehrlich gesagt, hätten wir das vor dem Entwickler verheimlichen sollen, haben es aber nicht getan. Tut mir leid. Die Wahrheit ist, dass der Windows Installer erwartet, dass der Verzeichnisbaum immer in einer Verzeichniszeile verwurzelt ist, in der der Primärschlüssel (Verzeichnis/@Id) "TARGETDIR" und die DefaultDir-Spalte (Verzeichnis/@Name) "SourceDir" ist.

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

Was wir im WiX-Toolset hätten tun sollen, ist, die Notwendigkeit der Angabe des Paares TARGETDIR/SourceDir zu beseitigen und zu sagen: "Jedes Verzeichniselement, das kein übergeordnetes Element hat, wird automatisch dem TARGETDIR übergeordnet, weil das MSI SDK das so vorsieht." Stattdessen müssen Sie es selbst tun... und einige Entwickler fragen sich, was das alles bedeutet.

21voto

Wim Coenen Punkte 64891

Aus der wix.chm-Dokumentation, Thema "How To: Add a File To Your Installer":

Das Element mit der id TARGETDIR ist wird vom Windows Installer benötigt und ist die Wurzel aller Verzeichnis Strukturen für Ihre Installation

Laut der MSDN-Dokumentation TARGETDIR es

das Root-Zielverzeichnis für die Installation

Auch laut MSDN, SourceDir es

das Root-Verzeichnis, in dem die Quellcabinet-Datei oder die Quelldatei Baum des Installationspakets

Die Eigenschaft SourceDir verweist also auf ein echtes Verzeichnis: das, in dem sich Ihre MSI-Datei befindet. Sie können dies im Protokoll des Installationsprogramms sehen, wenn Sie die Installation mit msiexec /lvx* installer.log installer.msi .

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

Ein kurzer Test zeigt, dass bei der Installation einer Komponente in TARGETDIR die Dateien tatsächlich im Stammverzeichnis meines Laufwerks D:\ abgelegt werden, anstatt in dem Ordner, in dem sich das MSI befindet.

3voto

spujia Punkte 127

Nichts davon war wirklich hilfreich für mich. Ich habe diesen Thread gefunden, als ich mich fragte, wie ich einen Debug-Build erstellen kann, bei dem meine Quelldateien (die, die in den Installer gehen) entweder aus dem "Release"-Build-Verzeichnis oder dem "Debug"-Build-Verzeichnis des Projekts, für das ich einen Installer erstellen möchte, gezogen werden können.

Nach einigem Suchen fand ich den tatsächlichen Pfad in der wixproj-Datei, in der SourceDir wie folgt definiert ist:

<SourceDir>$(SolutionDir)distribution\Release</SourceDir>

die eigentlich nichts mit Installations- und Projektdateien zu tun hat. Ich konnte eine weitere PropertyGroup hinzufügen, die die Release-Gruppe widerspiegelt, die nun auf meine Debug-Dateien verweist:

<SourceDir>$(SolutionDir)distribution\Debug</SourceDir>

Ich hoffe, das hilft jemandem. Ich weiß, es ist ein wenig off topic, aber hoffentlich hilft es jemandem in der Zukunft. Ich bin mir nicht sicher, warum das Projekt-Plugin diesen Wert nicht ausgibt? Oder übersehe ich das?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X