我真正想做的是让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
或{{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
)中。