Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

Erneutes Kopieren von Quelldaten


4 replies to this topic

Toqual

Toqual
  • Full Members
  • 3 posts

Posted 14 June 2010 - 07:17

Hallo,

ich muss ein Daten-Update mit Installshield erstellen. Ein Feature soll ein Archiv erstellen, dass Teile aus der aktuellen Installation in bestimmte andere Ordner kopieren soll.

Das Projekt ist ein Single_Exe. Gibt es eine Möglichkeit, die komprimierten Dateien über einen Copy-Befehl zu kopieren?

Ich habe die dekomprimierten Dateien nirgendwo gefunden, so dass ich den XCopy Befehl nicht nutzen kann.

Da die Dateien nicht in die normalen Verzeichnisse, die durch das eigentliche Feature bestimmt werden, kopierten werden sollen, klappt das MoveData auch nicht.

Vielen Dank im Voraus
Holger

Maharani

Maharani
  • Full Members
  • 50 posts

Posted 14 June 2010 - 10:51

Hallo,

ich verstehe nicht, wieso Du die dekomprimierten Daten nicht findest - das Feature weiss doch, wohin es installiert wurde?

Wir legen vor jedem Update ein Backup der Userdaten an:

CODE

function Backup()  
string  szBackupPath, szTemp, szTitle, szMsg, szDateTime, szDummy;  
number nResult;
LIST listBackup;  
begin                  
listBackup = ListCreate(STRINGLIST);

nResult = FindAllDirs(TARGETDIR, EXCLUDE_SUBDIR, listBackup);

ListSetIndex (listBackup, LISTFIRST);              
nResult = ListGetFirstString (listBackup, szTemp);
// Der Inhalt von Bin und Log wird nicht archiviert
while (nResult != END_OF_LIST)
 if (   (StrFindEx(szTemp, "\\Bin", StrLength(TARGETDIR)) > 0)
     || (StrFindEx(szTemp, "\\Log", StrLength(TARGETDIR)) > 0)
 ) then
  ListDeleteString(listBackup);  
  nResult = ListGetFirstString(listBackup, szTemp);
 else
  nResult = ListGetNextString (listBackup, szTemp);
 endif;
endwhile;

// Mal gucken, ob Daten drin sind
ListSetIndex(listBackup, LISTFIRST);
nResult = ListGetFirstString (listBackup, szTemp);
while (nResult != END_OF_LIST)    
 StrRemoveLastSlash(szTemp);
 if (FindAllFiles(szTemp, "*.*", szDummy, RESET) != 0) then
  ListDeleteString(listBackup);  
         ListSetIndex(listBackup, LISTFIRST);
  nResult = ListGetFirstString (listBackup, szTemp);
 endif;
 FindAllFiles(szTemp, "*.*", szDummy, CANCEL);
 nResult = ListGetNextString (listBackup, szTemp);
endwhile;
   
ListSetIndex(listBackup, LISTFIRST);
// Es gibt Dateien fuers Backup
if (ListCount(listBackup) > 0) then
 DateTimeToString(szDateTime);
 szBackupPath = TARGETDIR ^ "Backup" ^ szDateTime;
 szTitle = "";
 szMsg = @ID_MSG_BACKUP_FOLDERS;
 szMsg = szMsg + " " + szBackupPath;
 
 Disable(BACKBUTTON);
 SdShowInfoList( szTitle, szMsg, listBackup );

 // Kopieren
 Disable(LOGGING);
 Disable(CANCELBUTTON);
 nResult = ListGetFirstString(listBackup, szTemp);
 while (nResult != END_OF_LIST)
  StrSub(szDummy, szTemp, StrLength(TARGETDIR), StrLength(szTemp));
  XCopyFile(szTemp ^ "*.*", szBackupPath ^ szDummy ^ "*.*", INCLUDE_SUBDIR);
  nResult = ListGetNextString (listBackup, szTemp);
 endwhile;
 Enable(CANCELBUTTON);
 Enable(LOGGING);
 Enable(BACKBUTTON);  

endif;

ListDestroy( listBackup );
end;


Diese Funktion rufen wir in OnMaintUIBefore() und in OnUpdateUIBefore() auf.

Ist das das, was Du suchst?

Gruss
Rita



Toqual

Toqual
  • Full Members
  • 3 posts

Posted 14 June 2010 - 14:10

Hallo Rita,

Danke für die schnelle Antwort.
Es ist leider nicht ganz, was ich brauche. Die Dateien, die ins Archiv sollen, sind keine, die bereits installiert wurden (dann könnte ich sie tatsächlich leicht über die gespeicherten Pfade finden), sondern es sind die, die mit dem Setup grade kommen.

Dabei ist es so, dass der Benutzer 'Archiv' als Feature auswählen kann. Die anderen Features, die die Dateien in den normalen Pfaden installieren würden, müssen dabei nicht unbedingt ausgewählt werden, so dass ich sie auch nicht aus den eigentlichen Zielverzeichnissen herauskopieren kann.

Ich habe gehofft, dass ich in Installscript die Komponenten in das 'Archiv' - Feature umhängen könnte oder eben dass es einen 'virtuellen' Pfad gibt, der als Quelle für einen Copy Befehl die komprimierten Dateien des Setups in ein angegebenes Zielverzeichnis kopieren könnte.

Gruß
Holger

Maharani

Maharani
  • Full Members
  • 50 posts

Posted 14 June 2010 - 14:31

Wenn ich Dich richtig verstehe, willst Du das Feature "MyFeature", das normalerweise in TARGETDIR installiert wird, in einen Ordner Archiv installieren, wenn ein anderes Feature "Archiv" ausgewaehlt ist?

Man koennte das ueber Setuptypen loesen und in Abhaengigkeit vom Setuptype das TARGETDIR verschieden setzen, das wuerde sich aber auf alle Feature der Installation auswirken.

Eine andere Moeglichkeit waere, MyFeature in einen selbstdefinierten Pfad zu installieren (also nicht TARGETDIR, sondern <MyPath>; alle Komponenten des Features bekommen als Ziel nicht TARGETDIR sondern <MyPath>) und MyPath per FeatureSetTarget bei einer normalen Installation auf TARGETDIR zu setzen, und bei geweaehltem Archiv-Feature auf den Archivordner.
Du koenntest dann in OnFirstUIBefore/OnMaintUiBefore abtesten, ob das Archiv-Feature gesetzt ist, in Abhaengigkeit davon <MyPath> setzen und ggf. MyFeature explizit auswaehlen, falls noetig (mit FeatureSelectItem). Man koennte sich evtl. auch auf den OnInstalling-Handler des Archiv-Features setzen, da waere ich mir aber nicht sicher, ob das alle Szenarien abdeckt.

Jedenfalls ist das der Weg, den ich versuchen wuerde - falls ich Dein Problem diesmal richtig verstanden habe.
smile.gif

Gruss
Rita

Edited by Maharani, 14 June 2010 - 14:32.


Toqual

Toqual
  • Full Members
  • 3 posts

Posted 30 June 2010 - 08:51

Hallo,

mein Problem, dass ich die gleichen Dateien in verschiedenen Feature benutzen möchte, ist zum Glück keins.

Wenn ich das gleiche File zwei verschiedenen Komponenten hinzufüge, wird die Datei nicht zweimal als Binärstream gespeichert, sondern tatsächlich nur einmal.

Das war meine große Befürchtung. Ich habe die Dateien also in unterschiedlichen Features und kann so steuern, wo sie hinkopiert werden sollen.

Gruß
Holger