How to provide multiple serial number with multiple options in Inno Setup?
I want to write different values in Registry, based on different serial keys I provide to customers.
Ex different serial keys like:
sKey1 = "A1AA-B2ACF-HEJUI-UYTER"
sKey2 = "A1BB-B2ACF-HEJUI-UYTER"
sKey3 = "A1CC-B2ACF-HEJUI-UYTER"
First 4 characters or different for different keys want to create in Registry
if (custInput.startwith ("A1AA") then
Root: "HKLM"; Subkey: "SOFTWARE\Version\"; ValueType:string; ValueName:"Name";ValueData: "{"Lite"}";
elseif (custInput.startwith ("A1BB") then
Root: "HKLM"; Subkey: "SOFTWARE\Version\"; ValueType:string; ValueName:"Name";ValueData: "{"Pro"}";
elseif (custInput.startwith ("A1CC") then
Root: "HKLM"; Subkey: "SOFTWARE\Version\"; ValueType:string; ValueName:"Name";ValueData: "{"Online"}";
endif
How to achieve this in Inno Setup? I used CheckSerial
function below:
function CheckSerial(Serial: String): Boolean;
begin
Result := Serial = '{#SerialNumber}';
end;
Use a scripted constant to programatically decide about the value to store to the registry:
[Setup]
UserInfoPage=yes
[Registry]
Root: "HKLM"; Subkey: "SOFTWARE\Version"; ValueType: string; ValueName: "Name"; \
ValueData: "{code:GetEdition}";
[Code]
var
Serials: TStrings;
Editions: TStrings;
function CheckSerial(Serial: String): Boolean;
begin
Result := (Serials.IndexOf(Serial) >= 0);
end;
procedure RegisterEdition(Serial: string; Edition: string);
begin
Serials.Add(Serial);
Editions.Add(Edition);
end;
function GetEdition(Param: string): string;
var
Index: Integer;
begin
Index := Serials.IndexOf(WizardForm.UserInfoSerialEdit.Text);
if Index >= 0 then Result := Editions[Index];
end;
function InitializeSetup(): Boolean;
begin
Serials := TStringList.Create;
Editions := TStringList.Create;
RegisterEdition('A1AA-B2ACF-HEJUI-UYTER', 'Lite');
RegisterEdition('A1BB-B2ACF-HEJUI-UYTER', 'Pro');
RegisterEdition('A1CC-B2ACF-HEJUI-UYTER', 'Online');
Result := True;
end;