以下の例では、Postgresサーバが起動して動作するまで、createuser
コマンドの実行を遅らせたいとします。Inno Setup - Postgresデータベースの起動を待ちます
if Exec('pg_ctl', 'start -D C:\ProgramData\PostgresQL\data', '', SW_SHOW, ewWaitUntilIdle, ResultCode) then
begin
Sleep(10000);
// Create our database user
if Exec('createuser', '-w -d -R -S testdb', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
は、残念ながら任意のSleep()
を使用すると、私はこれを達成するために管理してきた唯一の方法です。 exWaitUntilIdle
フラグは驚くことではありませんが、トリックを実行せず、実行を十分に長く(すべての場合)延期します。
誰も、Postgres(pg_ctl start
)サーバコマンドが実行中であり、アイドル状態でコマンドを受け入れる準備ができるまで、createuser
が実行されないようにするためのより堅牢な方法を持っていますか?
なぜ 'ewWaitUntilTerminated'を使用しないのですか? –
Martin pg_ctlは終了しません。その後のすべてのコマンドが実行されるまで、実行し続ける必要があるサーバーを起動します。 – kh25
'pg_ctl'はバックグラウンドでサーバを起動しますか? *ドキュメントは、バックグラウンドで起動され、その標準入力は/ dev/null(またはWindowsではnul)にアタッチされています*ドキュメンテーションは明示的に、 'pg_ctl'はサーバの起動を待っていませんデフォルトでは –