Inno Setup - How to copy a file before starting installation?

I need to copy the file to a single folder before starting Inno Setup or before the Directory Selection page. I want this file to be copied from the installer, and not from an external source.

I am using this code:

function NextButtonClick(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; 
+9
source share
2 answers

To extract a file from the installation archive at any time, you need to use the ExtractTemporaryFile procedure. This procedure extracts the file from the [Files] section to the temporary directory used by the installation application, which can be found at the path specified by the constant {tmp} . Then you simply copy the extracted file to the target directory, increasing the specified constant.

If you want to do something during installation initialization, but before creating the wizard form, use the InitializeSetup event function. Please note that you can even exit this function without seeing the wizard form, for example, if the file you are going to copy is very important. Here is a sample code, but first look at the commented version it for some details:

 [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; 
+15
source

You need to extract the file, first to the temporary directory, and then copy it to where you want. Something like this should work:

 ; 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; 
+5
source

All Articles