2013-02-20 1716 views
8

對於安裝MySQL默默的,我試過之後在cmd命令,它工作正常:如何在Inno Setup的執行CMD命令

msiexec /i "mysql-essential-6.0.11-alpha-winx64.msi" /qn 

但是,我怎麼能運行該命令中的Inno Setup安裝之前?

+0

我不會親自使用'qn'選項這類安裝的。這可能需要一些時間(因爲它是一個數據庫系統),並且請注意,在安裝MySQL的過程中,用戶只會看到「空白」整個安裝進度條,而沒有通知在後臺發生了什麼。 – TLama 2013-02-20 16:20:42

+0

對於用戶通知我使用的是這樣並且用戶可以看到。你有更好的方式嗎? – 2013-02-20 16:39:26

+0

我認爲這很好,但是你會在哪裏執行'ECHO'命令?你有批處理文件嗎? – TLama 2013-02-20 17:03:02

回答

10

您可以通過調用Exec函數從CurStepChanged事件方法執行它,當步驟將是ssInstall。在顯示在下面的腳本,如何將包括MySQL的安裝到您的設置以及如何提取並執行安裝啓動權之前:

#define MySQLInstaller "mysql-essential-6.0.11-alpha-winx64.msi" 

[Files] 
Source: "{#MySQLInstaller}"; Flags: dontcopy 
[Code] 
procedure CurStepChanged(CurStep: TSetupStep); 
var 
    Params: string; 
    ResultCode: Integer; 
begin 
    if (CurStep = ssInstall) then 
    begin 
    ExtractTemporaryFile('{#MySQLInstaller}'); 
    Params := '/i ' + AddQuotes(ExpandConstant('{tmp}\{#MySQLInstaller}')) + ' /qn'; 
    if not Exec('msiexec', Params, '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then 
     MsgBox('Installation of MySQL failed. Exit code: ' + IntToStr(ResultCode), 
      mbInformation, MB_OK); 
    end; 
end; 

利用未使用的進度條:

由於MySQL安裝完成需要一段時間,並且您已決定隱藏安裝程序的用戶界面(反正也可能非常不安全),您可以擴展腳本以使用進度條顯示在其起始位置在安裝過程中以及未使用的時間。以下代碼至少在Windows XP系統上切換Inno Setup的安裝進度條到marquee style,並在狀態標籤中顯示說明。當MySQL安裝完成後,進度條切換回正常模式和實際Inno Setup的安裝開始:

#define MySQLInstaller "mysql-essential-6.0.11-alpha-winx64.msi" 

[Files] 
Source: "{#MySQLInstaller}"; Flags: dontcopy 
[Code] 
procedure CurStepChanged(CurStep: TSetupStep); 
var 
    Params: string; 
    ResultCode: Integer; 
begin 
    if (CurStep = ssInstall) then 
    begin 
    WizardForm.ProgressGauge.Style := npbstMarquee; 
    WizardForm.StatusLabel.Caption := 'Installing MySQL. This may take a few minutes...'; 

    ExtractTemporaryFile('{#MySQLInstaller}'); 
    Params := '/i ' + AddQuotes(ExpandConstant('{tmp}\{#MySQLInstaller}')) + ' /qn'; 
    if not Exec('msiexec', Params, '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then 
     MsgBox('Installation of MySQL failed. Exit code: ' + IntToStr(ResultCode), 
      mbInformation, MB_OK); 

    WizardForm.ProgressGauge.Style := npbstNormal; 
    WizardForm.StatusLabel.Caption := ''; 
    end; 
end; 
+2

這會工作,但對於預安裝的東西,現在最好使用「PrepareToInstall」事件函數。這樣可以更好地處理錯誤和其他需求,例如重啓之前的繼續。有關更多詳細信息,請參閱Inno隨附的示例腳本。我也強烈建議使用'/ qb'而不是'/ qn';它仍然立即開始安裝,但它顯示了進度。 – Miral 2013-02-21 20:03:11

+0

@Miral,這是真的,如果需要安裝後重新啓動。關於錯誤處理;從'ssInstall'步驟中的'CurStepChanged'步驟,您仍然可以告訴用戶MySQL的安裝失敗,如果按照這種方式執行'Abort'安裝。關於'qn'選項;正如我所說,我也反對。 – TLama 2013-02-22 02:11:59

+1

我知道,我只是想重新強調OP。 :) – Miral 2013-02-22 18:42:22