2010-12-14 57 views
6

退出Inno Setup安裝是否可以從安裝程序創建的安裝程序的[code]部分的函數中退出安裝?從[code]

我對設置退出代碼並不感興趣,我想要執行的是對需求的自定義檢查,如果以前未安裝該需求,則退出安裝。

+1

**是的,這是可能的。**你希望有人會寫的代碼嗎?你至少可以發佈''code''部分下已有的代碼嗎? – 2010-12-14 11:21:40

+0

這個問題是在這裏回答的:http://stackoverflow.com/questions/6345920/inno-setup-how-to-abort-terminate-setup-during-install – 010110110101 2013-05-06 20:21:18

回答

3

查看InnoSetup幫助中的InitializeSetup和Abort。正如科迪所說,這是可能的。如果您遇到問題,請發佈您所做的和您遇到的問題。

0

您的代碼部分中的某處執行檢查。對? 由於檢查結果您要退出安裝。 要執行的退出放線:

PostMessage (WizardForm.Handle, $0010, 0, 0); { quit setup, $0010=WM_CLOSE } 

希望這有助於

+0

這可以很容易地繞過使用靜音模式('/silent') – 2016-09-30 10:09:59

7

我做到這一點的方法是:

procedure ExitProcess(exitCode:integer); 
    external '[email protected] stdcall'; 

並使用它的方法是:

[Code] 
    if .... then begin 
    ExitProcess(0); 
    end; 
+1

雖然這似乎從用戶的角度來看,它留下了臨時文件。 – gogowitsch 2012-07-09 07:13:48

+0

這個答案使用了Wizard.Close,它似乎可以避免這個問題。 http://stackoverflow.com/questions/6345920/inno-setup-how-to-abort-terminate-setup-during-install – 010110110101 2013-05-06 20:22:48

+0

現在,如果只有我可以抑制提示,如果用戶希望退出... – 2014-02-12 17:55:07

10

您可以使用中止()如果您在這些事件:

InitializeSetup 
InitializeWizard 
CurStepChanged(ssInstall) 
InitializeUninstall 
CurUninstallStepChanged(usAppMutexCheck) 
CurUninstallStepChanged(usUninstall) 
3

爲了防止安裝程序運行時,當先決條件測試失敗,剛剛從InitializeSetup返回False。甚至在嚮導顯示之前,這將退出安裝程序。

function InitializeSetup(): Boolean; 
begin 
    Result := True; 

    if not PrerequisitesTest then 
    begin      
    SuppressibleMsgBox('Prerequisites test failed', mbError, MB_OK, MB_OK); 
    Result := False; 
    end; 
end; 

enter image description here


如果你需要測試的先決條件安裝啓動權之前只(即InitializeSetup太早),您可以從CurStepChanged(ssInstall)撥打Abort function

procedure CurStepChanged(CurStep: TSetupStep); 
begin 
    if CurStep = ssInstall then 
    begin 
    if not PrerequisitesTest then 
    begin      
     SuppressibleMsgBox('Prerequisites test failed', mbError, MB_OK, MB_OK); 
     Abort; 
    end; 
    end; 
end; 

enter image description here


雖然在這種情況下,請考慮使用PrepareToInstall event function機制,而不是退出設置。

function PrepareToInstall(var NeedsRestart: Boolean): String; 
begin 
    Result := ''; 

    if not PrerequisitesTest then 
    begin      
    Result := 'Prerequisites test failed'; 
    end; 
end; 

enter image description here


如果你需要強制終止安裝其他任何時間,使用ExitProcess WinAPI的呼叫:

procedure ExitProcess(uExitCode: Integer); 
    external '[email protected] stdcall'; 

function NextButtonClick(CurPageID: Integer): Boolean; 
begin 
    if CurPageID = wpReady then 
    begin 
    if not PrerequisitesTest then 
    begin      
     SuppressibleMsgBox('Prerequisites test failed', mbError, MB_OK, MB_OK); 
     ExitProcess(1); 
    end; 
    end; 
    Result := True; 
end; 

雖然這是相當不安全的退出,所以用它只作爲最後的手段方法。

enter image description here


相關問題