我真正想做的是让 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,bs3
。as
或 as2
的情况下检测 as3
?
确实,Inno Setup 不支持卸载组件。
对于类似的问题(也许更好),请参阅:
升级时禁用已安装的 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
中)。