2009-01-21 7 views
7

Bei der Installation möchte ich optional einige INI-Dateien von SOURCEDIR nach TARGETDIR kopieren, dh vom Verzeichnis, in dem sich die .msi-Datei befindet, in den Zielordner, in dem die App eingerichtet ist.WiX: CopyFile-Attribute

Ich tat <CopyFile Id="CopyIniFile" DestinationProperty="INSTALLDIR" SourceProperty="SOURCEDIR" SourceName="Dreem15.ini" Delete="no" /> aber es scheint, es tut nichts. Die Protokolldatei hilft nicht viel.

Ich habe erfolgreich mit CopyFile ein viel komplizierteres Szenario gemacht, und ich bin durch dieses einfache verblüfft.

Edit: Ich habe diese Zeilen in Tabelle Movefile:

|FileKey  |Component  |SourceName   |SourceFolder|DestFolder|Options 
|CopyIniFile |CoAppLicAndIni|Dreem15.ini   |SOURCEDIR |INSTALLDIR|0 
|MoveDataFile|CoAppLicAndIni|Dreem10_Personal.mdf|DB_DIR10 |INSTALLDIR|0

und die zweite arbeitet. DB_DIR10 wird in der Registry wie diese
gesucht

<Property Id="DB_DIR10"> 
    <RegistrySearch Id='DbDirSearch10' Type='raw' Root='HKLM' Key='Software\$(var.CompanyName)\$(var.MsdeInstance)' Name='Dreem10_Personal' /> 
</Property>

Antwort

3

Nach der Dokumentation zu Windows Installer für die sourcedir property setzen, verweist er auf „das Root-Verzeichnis, das die Quelle CAB-Datei enthält oder der Quelldateibaum des Installationspakets ".

Sie wussten also nicht, dass SourceDir eine vordefinierte Windows Installer-Eigenschaft ist, oder Sie versuchen, eine unverpackte Datei vom Installationsmedium zu kopieren, das die MSI enthält. Im letzteren Fall wäre es wahrscheinlich sinnvoller, die Datei wie eine normale Komponente zu installieren, damit sie ordnungsgemäß deinstalliert wird.

Bearbeiten: Ich habe das Szenario "Kopie von Installationsmedium" getestet und es hat für mich funktioniert. Außerdem habe ich mit

misexec /lvx* install.log /i mymsi.msi 

installiert und das Protokoll zeigte die Datei wird kopiert. Was sagt das Protokoll in deinem Fall?

Edit2: Während Copyfile für mich gearbeitet, eine bessere Lösung ist ein unkomprimiertes Medium dem wxs wie folgt hinzuzufügen:

<Media Id='2'/> 

und dann die Datei Element, wie dies für Ihre anpassbare Konfigurationsdatei anzupassen:

<File Source='path\to\default\config.ini' Compressed='no' DiskId='2' /> 

Dies wird das Installationsprogramm sucht config.ini im selben Ordner wie die msi machen, die Vorteile der Anpassbarkeit und eine saubere deinstallation zu kombinieren.

+0

Genau. Was ich tun möchte, ist, Unterstützung zu geben, eine Möglichkeit, Anpassung anzupassen, indem Sie eine Ini-Datei neben MSI-Datei. Dies wird einige Einstellungen pro Client enthalten. Natürlich könnte es mit einer Transformation (mst) für jeden Client gemacht werden, aber denke nicht, dass Support-Leute diese einfach erstellen können. – wqw

+0

Es zeigt nicht, dass etwas passiert.MoveFiles ist Skript, aber später tritt keine FileCopy auf. Wie hast du es genau gemacht? Snippet? – wqw

+0

Ich kopierte einfach Ihr Schnipsel, um es zu testen, und es funktionierte für mich ... Aber Sie können die überlegene "unkomprimiertes Medium" -Option versuchen, wie ich oben erklären. –

0

Können Sie DestinationDirectory="INSTALLDIR" stattdessen verwenden, oder Sie haben die Eigenschaften on the fly erstellen ??

WIX Wiki CopyFile Element

Diese wxs, wird die Datei im MSI

<Component Id="myIni.ini" Guid="*"> 
    <File Id="myIni.ini" Name="myIni.ini" KeyPath="yes" Source="!(wix.Files)\myIni.ini"> 
    <CopyFile Id="CopyIni" DestinationProperty="TARGETDIR" /> 
    </File> 
</Component> 
+0

Es ist unter einem Elternelement Datei oder Komponente? – CheGueVerra

+0

CopyFile befindet sich ab sofort unter einem separaten Component Parent. Wird eine benutzerdefinierte Aktion ausführen, wenn dies nicht einfach durchgeführt werden kann. – wqw