Inno Setup - 检查是否安装了组件

Inno Setup - Check if a component is installed

我真正想要做的是让 Inno Setup 卸载一个组件,如果它在随后的 运行 中没有被选中。但是,如果我没记错的话,这在 Inno Setup 中是不可能的(实际上,如果我错了,请纠正我)。

所以,我想创建一个检查功能来查看是否安装了一个组件,这样我就可以在随后的 运行 中隐藏它。除了 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\[AppName]_is1.

下的 Inno Setup: Selected Components 之外,我不确定还有什么地方可以获取该信息

现在的问题是我的 Inno Setup: Selected Componentsas,as2,as3,bs,bs2,bs3
如何在不检测 as2as3 的情况下检测 as

的确,Inno Setup 不支持卸载组件。


对于类似的问题(也许更好),请参阅:


对于已安装组件的检查,我建议您检查是否存在该组件对应的文件。


无论如何,回答你的实际问题:如果你想扫描 Inno Setup: Selected Components 条目,你可以使用这个功能:

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;

请注意,在某些情况下,卸载密钥可能会出现在 HKCU(而不是 HKLM)中。