2012-11-24 14 views
6

ho bisogno del tuo aiuto, ho bisogno di copiare un file in una cartella, prima di avviare l'installazione o prima della pagina di selezione dir, voglio che questo file sia copiato dal programma di installazione e non da una fonte esterna, se qualcuno può dare un esempio, per favore.Inno Setup - Come copiare un file prima dell'installazione?

sto usando questo codice:

function NextButtonClick1(PageID: Integer): Boolean; 
begin 
    Result := True; 
    if (PageId = wpWelcome) then begin 
     FileCopy(ExpandConstant('file.exe'), ExpandConstant('{reg:HKCU\SOFTWARE\XXX,InstallPath}\file.exe'), false); 
    end; 
end; 

spero che qualcuno dare una migliore idea con un esempio. Grazie d'ora in poi.

+2

Si noti che è generalmente di buon occhio di apportare modifiche al sistema dell'utente prima di fare clic il finale Avanti per avviare in realtà l'installazione - - dopo tutto, fino a quel momento potrebbero ancora voler cancellare. Inoltre è corrucciato per utilizzare o modificare le impostazioni in HKCU, dal momento che potrebbero non essere per l'utente che ti aspetti. – Miral

risposta

10

per estrarre un file dal setup archiviare qualsiasi momento avete bisogno dovrete usare ExtractTemporaryFile procedura. Questa procedura estrae il file dalla sezione [Files] a una directory temporanea utilizzata dall'applicazione di installazione, che è possibile trovare nel percorso specificato dalla costante {tmp}. Quindi copierai il file estratto in una directory di destinazione da lì espandendo la costante menzionata.

Se si desidera eseguire un'operazione quando viene inizializzata la configurazione, ma prima che venga creato il modulo della procedura guidata, utilizzare la funzione evento InitializeSetup. Nota che puoi persino uscire dall'impostazione da quella funzione senza visualizzare il modulo della procedura guidata, ad es. se il file che stai per copiare è molto importante. Ecco un esempio di codice, ma prima date un'occhiata al commented version di esso per alcuni dettagli:

[Code] 
function InitializeSetup: Boolean; 
begin 
    Result := True; 
    ExtractTemporaryFile('File.exe'); 
    if FileCopy(ExpandConstant('{tmp}\File.exe'), 
    ExpandConstant('{reg:HKCU\SOFTWARE\XXX,InstallPath}\File.exe'), False) 
    then 
    MsgBox('File copying succeeded!', mbInformation, MB_OK) 
    else 
    MsgBox('File copying failed!', mbError, MB_OK) 
end; 
3

È necessario estrarre il file, prima in una directory temporanea, quindi copiarlo nel punto desiderato. Qualcosa del genere dovrebbe funzionare:

; Script generated by the Inno Setup Script Wizard. 
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! 

#define MyAppName "My Program" 
#define MyAppVersion "1.5" 
#define MyAppPublisher "My Company, Inc." 
#define MyAppURL "http://www.example.com/" 
#define MyAppExeName "MyProg.exe" 

[Setup] 
; NOTE: The value of AppId uniquely identifies this application. 
; Do not use the same AppId value in installers for other applications. 
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) 
AppId={{5820E516-8DD7-4481-A016-63D3F00438C8} 
AppName={#MyAppName} 
AppVersion={#MyAppVersion} 
;AppVerName={#MyAppName} {#MyAppVersion} 
AppPublisher={#MyAppPublisher} 
AppPublisherURL={#MyAppURL} 
AppSupportURL={#MyAppURL} 
AppUpdatesURL={#MyAppURL} 
DefaultDirName={pf}\{#MyAppName} 
DefaultGroupName={#MyAppName} 
OutputBaseFilename=setup 
Compression=lzma 
SolidCompression=yes 

[Languages] 
Name: "english"; MessagesFile: "compiler:Default.isl" 

[Tasks] 
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked 

[Files] 
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion 
; NOTE: Don't use "Flags: ignoreversion" on any shared system files 

[Icons] 
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" 
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon 

[Run] 
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: nowait postinstall skipifsilent 


[Code] 
function InitializeSetup: Boolean; 
var 
    S: AnsiString; 
begin 
    // Show the contents of Readme.txt (non Unicode) in a message box 
    log('Before Extract'); 
    ExtractTemporaryFile('myprog.exe'); 
    log('Before FileCopy. Dest:' + ExpandConstant('{reg:HKCU\SOFTWARE\XXX,InstallPath}\file.exe')); 
    log('temp: ' + ExpandConstant('{tmp}\myprog.exe')); 
    FileCopy(ExpandConstant('{tmp}\myprog.exe'), ExpandConstant('{reg:HKCU\SOFTWARE\XXX,InstallPath}\file.exe'), false); 
    log('After FileCopy'); 
    Result := True; 
end;