2014-02-12 85 views
1

我的安裝程序的一部分會檢查我們服務器上的最新版本,並在必要時自動下載,並在歡迎頁面後面自動下載。實際檢查和下載的功能是CheckForNewInstaller,如果下載並執行了新的安裝程序,則返回True,如果需要繼續,則返回False。如果新安裝程序已下載(True),則該向導需要關閉。如何在沒有提示的情況下正確關閉Inno安裝嚮導?

使用下面的代碼,我使用WizardForm.Close完成了這個。但是,如果他們確定要取消,它仍會提示用戶。在正常情況下,如果用戶嘗試關閉安裝程序,我仍然希望用戶獲得此提示。但是,當我需要強制關閉嚮導時,我需要禁用此對話框。我也不能終止這個過程,因爲清理過程不會正常進行。

function NextButtonClick(CurPageID: Integer): Boolean; 
var 
    ResultCode: Integer; 
    X: Integer; 
begin 
    Log('NextButtonClick(' + IntToStr(CurPageID) + ') called'); 
    Result := True; 
    case CurPageID of 
    wpWelcome: begin 
     if CheckForNewInstaller then begin 
     //Need to close this installer as new one is starting 
     WizardForm.Close; 
     end; 
    end; 
    .... 
    end; 
end; 

如何在不進行任何用戶交互的情況下完全關閉此安裝程序?

回答

3

這可以通過處理CancelButtonClick事件並設置Confirm參數來完成...

var 
    ForceClose: Boolean; 

procedure Exterminate; 
begin 
    ForceClose:= True; 
    WizardForm.Close; 
end; 

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); 
begin 
    Confirm:= not ForceClose; 
end; 

function NextButtonClick(CurPageID: Integer): Boolean; 
var 
    ResultCode: Integer; 
    X: Integer; 
begin 
    Log('NextButtonClick(' + IntToStr(CurPageID) + ') called'); 
    Result := True; 
    case CurPageID of 
    wpWelcome: begin 
     if CheckForNewInstaller then begin 
     Exterminate; 
     end; 
    end; 
    .... 
    end; 
end; 
+0

那麼,你正在使用錯誤的事件。如果你想阻止安裝程序啓動,你應該使用'InitializeSetup'事件方法。在所有情況下,這個答案都是錯誤的。 – TLama

+0

@TLama這不是第一件事,我希望這在歡迎頁面後發生。我從來不想阻止嚮導的啓動,或者我會把它放在'InitializeSetup'中。 –

+0

@TLama其實我發佈了這個問題/答案後,我改變了邏輯,現在甚至在嚮導中有一個頁面,詢問他們是否想檢查新版本。 –

相關問題