inno-setuppascalscript

Different serial keys with different options in Inno Setup?


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;

Solution

  • 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;