2016-04-25 8 views
2

以下の例では、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が実行されないようにするためのより堅牢な方法を持っていますか?

+0

なぜ 'ewWaitUntilTerminated'を使用しないのですか? –

+0

Martin pg_ctlは終了しません。その後のすべてのコマンドが実行されるまで、実行し続ける必要があるサーバーを起動します。 – kh25

+0

'pg_ctl'はバックグラウンドでサーバを起動しますか? *ドキュメントは、バックグラウンドで起動され、その標準入力は/ dev/null(またはWindowsではnul)にアタッチされています*ドキュメンテーションは明示的に、 'pg_ctl'はサーバの起動を待っていませんデフォルトでは –

答えて

2

使用-w switchewWaitUntilTerminatedフラグ:

完了するために、起動または停止を待ちます。 Waitingはシャットダウンのデフォルトオプションですが、スタートアップではありません。 ... pg_ctlは、起動またはシャットダウンの成功に基づいて終了コードを返します。

+0

-wスイッチで動作するように見えます。再度、感謝します。 – kh25

関連する問題