For this you will have to generate the script as mentioned in detail in previous post and before running the script (generated by inno setup) you will have to edit the code. That is when it asks do you want to compile the new script now ? select no as image below shows
Now you can edit the script which is similar to pascal but a dedicated inno setup script.
There are two ways to make the installer ask for serial key
1. Under the [Setup] tag add UserInfoPage=yes and also write the event function CheckSerial after the [code] tag. You can write the code for checking serial key within this function. Only these two things have to be added extra. Documentation of this function can be read here. For instance here i am checking whether the key is a 9 digit even number.
1. Under the [Setup] tag add UserInfoPage=yes and also write the event function CheckSerial after the [code] tag. You can write the code for checking serial key within this function. Only these two things have to be added extra. Documentation of this function can be read here. For instance here i am checking whether the key is a 9 digit even number.

function CheckSerial (Serial: String): Boolean;
var
CanContinue: Boolean;
New_New:Longint;
begin
CanContinue:=False;
New_New:=1;
New_New:=StrToIntDef(Serial,New_New);
if(New_New mod 2 = 0) and (Length(Serial)=9) then //simple check if the value
//is a 9 digit even number
begin CanContinue:= True ; end
else begin CanContinue:=False; end;
WizardForm.NextButton.Enabled := CanContinue;
Result:=CanContinue;
end;
2. You can create a new page for serial key validation which requires a few more steps.
Documentation on creating Custom Wizard Pages can be read here and here. A detailed description of the code is given side by side
[code]
//declaring global variables
var
EditFields: array of TEdit; //declaring an array of editfields to hold your serial key.
PageToDisplaySerialKey: TWizardPage; //declaring a custom wizard page
//declaring constants that is used throughout the code
const
NO_OF_FIELDS = 1; //no of editfields you require . Here only 1 editfield is shown
CHAR_PER_FIELD = 9; // no.of characters per field
//procedure that constantly checks for changes in editfields
procedure EditChange(From: TObject);
//declare variables used in this procedure
var
I: Integer;
CanContinue: Boolean;
x:String;
Can:Boolean;
New_New:Longint;
begin
//initialize all variables
CanContinue := False;
Can:=False;
x:='';
New_New:=1;
x:= EditFields[0].Text; //get the value in the editfield.. here only 1 edit field so index 0
New_New:=StrToIntDef(x,New_New); // in this installer i allow only numbers as key, so converting string to integer
//in a for loop check whether 9 characters(CHAR_PER_FIELD) have been entered
for I := 0 to GetArrayLength(EditFields) - 1 do
if Length(EditFields[I].Text) < CHAR_PER_FIELD then
begin
CanContinue := False;
Break;
end
else begin CanContinue := True; end;
// if all characters are entered then validate the key. Here i am using a simple logic.. check whether the entered 99 didgit number
//is even or not. If it is even proceed else disable the next button
if(Length(x)=(NO_OF_FIELDS *CHAR_PER_FIELD)) and CanContinue then
begin
if New_New mod 2 = 0 Then
begin Can:= True ; end;
end;
WizardForm.NextButton.Enabled := Can;
end;
//designing the custom page
procedure SerialKeyPage;
var
I: Integer;
EditField: TEdit;
Labels: TLabel;
Width: Integer;
begin
PageToDisplaySerialKey := CreateCustomPage(wpWelcome, 'Serial Key validation','');//where wpWelcome is the predefined id for Welcome page
//http://www.jrsoftware.org/ishelp/index.php?topic=scriptpages
Labels := TLabel.Create(PageToDisplaySerialKey);
Labels.Parent := PageToDisplaySerialKey.Surface;
Labels.Caption := 'Provide a valid serial number and continue with the installation process'; //caption that appears on the page
SetArrayLength(EditFields, NO_OF_FIELDS);
Width := (PageToDisplaySerialKey.SurfaceWidth - ((NO_OF_FIELDS - 1)*5)) div NO_OF_FIELDS; //not necessary now since we have only 1 field
// a loop isn't necessary as now we have only 1 field but else useful
EditField := TEdit.Create(PageToDisplaySerialKey);
EditField.Top := 110; //space on top of the editfield
EditField.Width := Width;
EditField.OnChange := @EditChange; //execute the EditChange procedure everytime the text changes
EditField.MaxLength := CHAR_PER_FIELD;//allows only this much characters
EditField.Parent := PageToDisplaySerialKey.Surface;
EditFields[0] := EditField;
end;
procedure CurPageChanged(PageID: Integer);
begin
//if the current page is the custom page diable next button initially and enable only when key is correct
if PageID = PageToDisplaySerialKey.ID then
WizardForm.NextButton.Enabled := False;
end;
procedure InitializeWizard;
begin
//shows the serial key page after the welcome page
SerialKeyPage;
end;

Once you finish editing the script compile the code as shown in these figures and save this script for later verification.
This is the welcome screen that appears first when you compile the code


FIGURE 1 FIGURE 2
FIGURE 1 is the screen that appears if you made use of the first approach and FIGURE 2 is the result of second approach.
Software License for InnosetUp



