MySQLをサイレントインストールするために、cmdで次のコマンドを試してみましたが、正常に動作します。
msiexec /i "mysql-essential-6.0.11-alpha-winx64.msi" /qn
しかし、 Inno Setupにインストールする前にそのコマンドを実行するにはどうすればよいですか?
MySQLをサイレントインストールするために、cmdで次のコマンドを試してみましたが、正常に動作します。
msiexec /i "mysql-essential-6.0.11-alpha-winx64.msi" /qn
しかし、 Inno Setupにインストールする前にそのコマンドを実行するにはどうすればよいですか?
ステップがになるときに、イベントメソッドExec
から関数を呼び出すことで実行できます。次のスクリプトは、そのMySQLインストーラーをセットアップに含める方法と、インストールが開始される直前にそれを抽出して実行する方法を示しています。CurStepChanged
ssInstall
#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のインストールが完了すると、プログレスバーが通常モードに戻り、実際のInnoSetupのインストールが開始されます。
#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;