
Kopieren immer wider verschiedener Dateien
Posted 18 February 2010 - 11:47
Vorweg. Ich habe die Setups übernehmen müssen und eigentlich keinen Schimmer von InstallShield 2008.
Ich habe hier ein Setup wo am Ende Dateien 1 zu1 kopiert werden sollen. Dass heisst, es gibt auf der CD ein Ordner /Files/*.* das danach nach ImstallDir/Files/ kopiert werden soll.
Die Dateien in Files können aber immer wieder verschieden heissen oder auch in unterschiedlicher Anzahl vorliegen. Ich kann es also im Setup nicht fest verdraten.
Der Ordner wird also mit Dateien befüllt und danach auf CD gebrannt.
Zur Lösung wurde ein Tool geschrieben das die Aufgabe übernehmen soll. Das macht mich aber gewaltig stutzig. Das sollte doch mit InstallShield ohne externe Hilfe möglich sein. Oder?
Das Tool hat nämlich das Problem das die übergebenen Pfade unter umständen ~1 drin haben. Also 8.3 Notation. Dann fällt das Copy Tool auf die Nase.
Kann InstallShield 2008 Dateien 1 zu 1 kopieren ohne das ich im Setup genau definieren muss welche es sind?
1 Ordner, Dateien rein, und diese kommen in ein Zielordner.
Wenn das geht, wo muss ich da was machen?
Posted 18 February 2010 - 11:57
Ich würde es über das InstallScript machen. Hierzu kannst du folgenden Befehl verwenden:
CODE |
CopyFile (SrcDir^ "*.*", TargetDir ^ "*.*"); |
Gruß Timo
Posted 18 February 2010 - 12:40
Sind exe oder dll im files im Ordner \Files\?
Einfach mal mit dem Setup-Assistenten die Dateien bzw. den Ordner einbinden. Der Assistent wird dann die Dateien evtl. mit dynamic file linking in eine Komponente packen. dll und exe Dateien werden als keyfiles in extra Komponenten eingebunden.
Beim dynamic file linking können sich die Dateiname und auch die Anzahl der Dateien im verknüpften Ordner ändern.
Die Einstellungen der Komponenten können auch nachträglich im View Setup-Design angepasst werden. Also dynamische Verknüpfung der Komponenten oder nicht.
Edited by ali, 18 February 2010 - 12:42.
Posted 18 February 2010 - 13:15
Posted 18 February 2010 - 15:12
Ich habe es jetzt mit "XCopyFile(svSourcePath ^ "CopyFiles/*", svDestinationPath, INCLUDE_SUBDIR)" gemacht. Das Zielverzeichnis wird mir erstellt aber es wird nichts kopiert. In der Source habe ich einiges an inhalt drin.
Posted 18 February 2010 - 16:30
Es tut. Aber ich kenn mich nicht mit Seiteneffekten aus.
CODE |
if (XCopyFile(svSourcePath ^ "CopyFiles/*.*", svDestinationPath ^ "*.*", COMP_NORMAL | INCLUDE_SUBDIR | CLEAR_FILE_ATTR) < 0) then MessageBox ("XCopyFile failed | Source: " ^ svSourcePath ^ "CopyFiles/* | Target: " ^ svDestinationPath, SEVERE); endif; |
Posted 18 February 2010 - 17:20
Waru machst du "svSourcePath ^ "CopyFiles/*.*" " ich weiß nicht ob das funktioniert. Ich würde es so machen:
CODE |
svSourcePath2 =svSourcePath ^ "CopyFiles"; XCopyFile (svSourcePath2 ^ "*.*" , svDestinationPath ^ "*.*"COMP_NORMAL | INCLUDE_SUBDIR | CLEAR_FILE_ATTR); |
Posted 19 February 2010 - 08:18
Aber kopieren tut es. Das Problem ist eigentlich gelöst, b.z.w. war gar nie ein Problem.
Das eigentliche Problem ist das hier: Error 1308 source file not found
Das muss ich noch lösen. Das kopieren tut.

Posted 19 February 2010 - 08:48
if (XCopyFile(svSourcePath ^ "CopyFiles\\*.*", svDestinationPath ^ "*.*", COMP_NORMAL | INCLUDE_SUBDIR | CLEAR_FILE_ATTR) < 0)
Um ein \ innerhalb von Strings/Variablen darzustellen braucht man \\
Edited by Spitfyr, 19 February 2010 - 09:36.
Posted 19 February 2010 - 09:17
QUOTE (Spitfyr @ 2010-02-19 08:48) |
Um ein \ innerhalb von darzustellen braucht man \\ |
Ups. Danke für den Hinweis. Werde ich noch rein tun.
Posted 19 February 2010 - 09:30
QUOTE (Spitfyr @ 2010-02-19 08:48) |
Um ein \ innerhalb von darzustellen braucht man \\ |
Ups. Danke für den Hinweis. Werde ich noch rein tun.
Posted 19 February 2010 - 11:03
QUOTE |
Kann InstallShield 2008 Dateien 1 zu 1 kopieren ohne das ich im Setup genau definieren muss welche es sind? |
Man kann Dateien auch ohne Script kopieren (Script ist oft anfällig bzgl. der Virenscanner).
Als Alternative kann man die Table "MoveFile" (gehe mal in den DirectEditor) verwenden. Das hat den Vorteil, dass der WindowsInstaller auch das ganze Rollback Handling (im Falle eines Abbruches) übernimmt. Bei CopyFile per Script sind die Dateien dann da, auch wenn danach ein Abbruch erfolgt.
Man kann da auch mit *.* arbeiten (aber keine Unterordner mit kopieren).
Man muss nur eine Komponente mit dem Eintrag verbinden. Wenn diese Komponente installiert (oder deinstalliert) wird, werden die Dateien kopiert.
Posted 19 February 2010 - 11:53
Ich frage mich jetzt aber schon wie so man ein spezielles Copytool machte wenn InstallShield ja alles schon kann.