George Hovhannisian
George Hovhannisian

Reputation: 707

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?

Upvotes: 2

Views: 3122

Answers (1)

Martin Prikryl
Martin Prikryl

Reputation: 202118

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.

Upvotes: 2

Related Questions