2017-05-29 313 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'中擁有所有組件。 –