| 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 Program
 
- AppVersion=1.5
 
- WizardStyle=modern
 
- DefaultDirName={autopf}\My Program
 
- DefaultGroupName=My Program
 
- UninstallDisplayIcon={app}\MyProg.exe
 
- OutputDir=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;
 
 
  |