inno-setuppascalscript

Check if an Inno Setup component is installed


What I really want to do is have Inno Setup uninstall a component, if it's unchecked in a subsequent run. But, if I'm not mistaken, that is not possible in Inno Setup (actually, correct me, if I'm wrong on this).

So, instead I want to make check function to see if a component is installed, so I can hide it during subsequent runs. I'm not sure where else to get that info other than the Inno Setup: Selected Components under HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\[AppName]_is1.

Now the problem is my Inno Setup: Selected Components is as,as2,as3,bs,bs2,bs3.
How can I detect as, without detecting as2 or as3?


Solution

  • Indeed, Inno Setup does not support uninstalling components.


    For a similar question (and maybe better), see:
    Disable already installed Inno Setup components on upgrade


    For checking of installed components, I'd rather suggest you to check for existence of files corresponding to the component.


    Anyway, to answer your actual question: If you want to scan the Inno Setup: Selected Components entry, you can use this function:

    function ItemExistsInList(Item: string; List: string): Boolean;
    var
      S: string;
      P: Integer;
    begin
      Result := False;
      while (not Result) and (List <> '') do
      begin
        P := Pos(',', List);
        if P > 0 then
        begin
          S := Copy(List, 1, P - 1);
          Delete(List, 1, P);
        end
          else
        begin
          S := List;
          List := '';
        end;
        
        Result := (CompareText(S, Item) = 0);
      end;
    end;
    

    Note that the uninstall key can be present in HKCU (not in HKLM) under certain circumstances.