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

时间:2017-05-29 02:09:54

标签: inno-setup pascal pascalscript

我真正想做的是让Inno Setup卸载一个组件,如果它在后续运行中未经检查。但是,如果我没有弄错的话,那在Inno Setup中是不可能的(实际上,如果我错了,请纠正我)。

所以,我想制作检查功能以查看是否安装了组件,因此我可以在后续运行期间隐藏它。除了Inno Setup: Selected Components下的HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\[AppName]_is1之外,我不确定除了Inno Setup: Selected Components之外还能在哪里获取该信息。

现在问题是as,as2,as3,bs,bs2,bs3as 如何检测as2,而不会检测到as3或{{1}}?

1 个答案:

答案 0 :(得分:1)

实际上,Inno Setup不支持卸载组件。

对于类似的问题(也许更好),请参阅:
Inno Setup: Disable already installed components on upgrade

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

无论如何,要回答您的实际问题:如果您想扫描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)中。