2013-02-20 1728 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