| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 | ; -- CodePrepareToInstall.iss --;; This script shows how the PrepareToInstall event function can be used to; install prerequisites and handle any reboots in between, while remembering; user selections across reboots.[Setup]AppName=My ProgramAppVersion=1.5WizardStyle=modernDefaultDirName={autopf}\My ProgramDefaultGroupName=My ProgramUninstallDisplayIcon={app}\MyProg.exeOutputDir=userdocs:Inno Setup Examples Output[Files]; Place any prerequisite files here, for example:; Source: "MyProg-Prerequisite-setup.exe"; Flags: dontcopy; Place any regular files here, so *after* all your prerequisites.Source: "MyProg.exe"; DestDir: "{app}";Source: "MyProg.chm"; DestDir: "{app}";Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme;[Icons]Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"[Code]const  (*** Customize the following to your own name. ***)  RunOnceName = 'My Program Setup restart';  QuitMessageReboot = 'The installation of a prerequisite program was not completed. You will need to restart your computer to complete that installation.'#13#13'After restarting your computer, Setup will continue next time an administrator logs in.';  QuitMessageError = 'Error. Cannot continue.';var  Restarted: Boolean;function InitializeSetup(): Boolean;begin  Restarted := ExpandConstant('{param:restart|0}') = '1';  if not Restarted then begin    Result := not RegValueExists(HKA, 'Software\Microsoft\Windows\CurrentVersion\RunOnce', RunOnceName);    if not Result then      MsgBox(QuitMessageReboot, mbError, mb_Ok);  end else    Result := True;end;function DetectAndInstallPrerequisites: Boolean;begin  (*** Place your prerequisite detection and extraction+installation code below. ***)  (*** Return False if missing prerequisites were detected but their installation failed, else return True. ***)  //<your code here>  //extraction example: ExtractTemporaryFile('MyProg-Prerequisite-setup.exe');  Result := True;  (*** Remove the following block! Used by this demo to simulate a prerequisite install requiring a reboot. ***)  if not Restarted then    RestartReplace(ParamStr(0), '');end;function Quote(const S: String): String;begin  Result := '"' + S + '"';end;function AddParam(const S, P, V: String): String;begin  if V <> '""' then    Result := S + ' /' + P + '=' + V;end;function AddSimpleParam(const S, P: String): String;begin Result := S + ' /' + P;end;procedure CreateRunOnceEntry;var  RunOnceData: String;begin  RunOnceData := Quote(ExpandConstant('{srcexe}')) + ' /restart=1';  RunOnceData := AddParam(RunOnceData, 'LANG', ExpandConstant('{language}'));  RunOnceData := AddParam(RunOnceData, 'DIR', Quote(WizardDirValue));  RunOnceData := AddParam(RunOnceData, 'GROUP', Quote(WizardGroupValue));  if WizardNoIcons then    RunOnceData := AddSimpleParam(RunOnceData, 'NOICONS');  RunOnceData := AddParam(RunOnceData, 'TYPE', Quote(WizardSetupType(False)));  RunOnceData := AddParam(RunOnceData, 'COMPONENTS', Quote(WizardSelectedComponents(False)));  RunOnceData := AddParam(RunOnceData, 'TASKS', Quote(WizardSelectedTasks(False)));  (*** Place any custom user selection you want to remember below. ***)  //<your code here>    RegWriteStringValue(HKA, 'Software\Microsoft\Windows\CurrentVersion\RunOnce', RunOnceName, RunOnceData);end;function PrepareToInstall(var NeedsRestart: Boolean): String;var  ChecksumBefore, ChecksumAfter: String;begin  ChecksumBefore := MakePendingFileRenameOperationsChecksum;  if DetectAndInstallPrerequisites then begin    ChecksumAfter := MakePendingFileRenameOperationsChecksum;    if ChecksumBefore <> ChecksumAfter then begin      CreateRunOnceEntry;      NeedsRestart := True;      Result := QuitMessageReboot;    end;  end else    Result := QuitMessageError;end;function ShouldSkipPage(PageID: Integer): Boolean;begin  Result := Restarted;end;
 |