【问题标题】:Inno Setup - Check if a component is installedInno Setup - 检查是否安装了组件
【发布时间】:2017-05-29 02:09:54
【问题描述】:

我真正想做的是让 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
如何检测as,而不检测as2as3

【问题讨论】:

标签: inno-setup pascal pascalscript


【解决方案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)中。

【讨论】:

  • 好的,这可行,但我不会使用它。我误解了 inno 对 Inno Setup: Selected Components 的作用。我以为它会将组件添加到值中,但它实际上替换了整个值,这使得整个过程变得无用。我会看看你链接的帖子中的解决方案,但我想我最终会按照你的建议检查已安装的文件。
  • 实际上,那篇文章也说了同样的话。 Inno Setup: Selected Components 在每次安装期间都会被重写,所以对于像这样的海豚来说它有点没用。文件检查是,然后...
  • 如果您只是禁用已安装的组件(并保持选中状态),您将拥有Inno Setup: Selected Components 中的所有组件。
  • 我对组件应用了检查功能,结果是true,因此这些组件在第二次运行时不可见,并且默认情况下它们是未选中的(因为 Inno 认为它们已经安装)。
猜你喜欢
  • 1970-01-01
  • 2022-10-22
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多