2017-05-29 314 views
1

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

所以,相反我要让检查功能,查看是否已安装的组件,所以后续运行过程中我可以将其隐藏。我不确定除HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\[AppName]_is1以外的Inno Setup: Selected Components以外的其他信息。现在

的问题是我的Inno Setup: Selected Components是​​。
如何检测as,没有检测as2as3

+0

参见[Inno Setup的:禁用升级已经安装的组件(https://stackoverflow.com/q/35454876/850848)。 –

回答

1

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


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


已安装的组件的检查,我宁愿建议你检查相应的文件的存在组件。


无论如何,回答您的实际问题:在

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存在(不:如果你要扫描的Inno Setup: Selected Components项,您可以使用此功能HKLM)在某些情况下。

+0

好的,这个工程,但我不会用这个。我误解了Inno Setup:Selected Components'。我认为它会将组件添加到该值,但它实际上会替换整个值,从而导致整个过程无用。我会在链接的帖子中看看解决方案,但是我想我会最终检查已安装的文件,正如你所建议的那样。 –

+0

其实,那篇文章说的是同样的事情。 'Inno Setup:Selected Components'在每次安装过程中都会被重写,所以对于这样的组合来说它是没用的。文件检查它是,然后... –

+0

如果你只是禁用已经安装的组件(并保持它被选中),你将在'Inno Setup:Selected Components'中拥有所有组件。 –