2013-05-16 11 views
6

Come possiamo copiare, spostare, rinominare i file utente prima dell'installazione?InnoSetup - copia i file prima dell'installazione

Possiamo facilmente eliminare i file utilizzando la sezione [InstallDelete]:

[InstallDelete] 
Type: files; Name: "{app}\SomeFile.exe"; 

Possiamo fare copiare, rinominare in modo simile?

EDIT:

Ho provato a fare questo nella sezione [file], ma ricevo un errore durante la compilazione perché il file di origine non esiste:

[Files] 
Source: "{app}\SomeFile.exe"; DestDir: "{app}\SomeDir\SomeFile.exe"; 
+0

Se il file di origine non esiste, come si suppone InnoSetup includerlo nell'installazione? –

+1

@Thorsten, puoi usare il flag ['external'] (http://www.jrsoftware.org/ishelp/index.php?topic=filessection&anchor=external), ma è una cattiva idea anche se funzionasse. – TLama

+0

@Thorsten: non voglio includere questi file nell'installazione. Questi sono i file di salvataggio dell'utente che voglio spostare in un'altra sottodirectory dell'applicazione (se i file esistono). –

risposta

8

Per la copia dei file è possibile utilizzare la sezione [Files] , ma non penso che ci sia un modo per spostare o rinominare le operazioni in una sezione separata, quindi ti suggerisco di usare la sezione [Code] per questo.

Ecco un codice di esempio per le operazioni di spostamento e ridenominazione. Entrambi utilizzano la funzione RenameFile come è internamente la stessa operazione:

[Code] 
procedure CurStepChanged(CurStep: TSetupStep); 
begin 
    if CurStep = ssInstall then 
    begin 
    // move file 
    if not RenameFile(ExpandConstant('{app}\SomeDir\SomeFile.exe'), ExpandConstant('{app}\SomeFile.exe')) then 
     MsgBox('File moving failed!', mbError, MB_OK); 
    // rename file 
    if not RenameFile(ExpandConstant('{app}\SomeFile.exe'), ExpandConstant('{app}\RenamedSomeFile.exe')) then 
     MsgBox('File moving failed!', mbError, MB_OK); 
    end; 
end; 
+1

Grazie! Stavo solo cercando quale funzione [Codice] usare per posizionare il codice di movimento. procedura CurStepChanged (Curtep: TSetupStep); funzionerà bene Ancora meglio, posso avvertire l'utente che ho spostato i suoi file di salvataggio. –

+0

Prego! E sì, questo sembra giusto per gli utenti :-) – TLama

+1

Ricorda che i file utente dovrebbero essere in una delle cartelle '{user *}' e che non puoi fare affidamento sul programma di installazione per spostarli per te. Il programma di installazione viene eseguito solo da un utente, ma è possibile che più utenti stiano utilizzando la tua applicazione. Deve essere responsabilità dell'applicazione stessa gestirli. – Miral

Problemi correlati